2012-09-04 14 views
0

我有一个创建一些HTML作为一个字符串,并上载字符串作为文件亚马逊的web应用程序在Amazon S3上的文件时得到损坏S3。使用汉字使用client.PutObject和request.ContentBody创建与AWS的.Net SDK

检查调试器中的字符串之前,我看到的HTML看起来很好,但是当我检查该文件中的斗我看到一些角色已经改变了文件上传。它只发生在某些字符上。例如:

这是GO时间在Android™!

成为

伊达€™的GO时间在Android上“¢!

这是确切的代码使用:

using (var client = AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey, s3Config)) 
     { 
      var request = new PutObjectRequest() 
       .WithBucketName(bucketName) 
       .WithKey(fileKey) 
       .WithMetaData("title", title); 
      request.ContentBody = body; 
      S3Response response = client.PutObject(request); 
      response.Dispose(); 
     } 

我试图.WithContentBody(体),但它改变为request.ContentBody =主体;看看这会神奇地工作,但显然它没有。

body变量是HTML字符串。当我在调试器中查看它时,字符看起来应该是这样。另外,当我使用Visual Studio HTML查看器的正文值时,它看起来很好。

任何想法,我可能做错了什么?我错过了一些设置?似乎无法在我的网页搜索中找到任何其他身体问题。

回答

0

终于想出了这一个。没有更快发现它,因为我在调试器中的HTML字符串在浏览器中呈现OK,但它应该是显而易见的。

我有运送他们之前特殊字符进行编码。我无法使用标准的HttpUtility来编码整个HTML字符串,因为所有的HTML标签都会被编码。

我用这个方法:

private static string HtmlEncodeSpecialChars(string html) 
    { 
     var sb = new StringBuilder(); 
     foreach (var c in html) 
     { 
      if (c > 127) // special chars 
       sb.Append(String.Format("&#{0};", (int)c)); 
      else 
       sb.Append(c); 
     } 
     return sb.ToString(); 
    } 

我所看见的here

似乎至今在做的伎俩。

相关问题