2012-07-17 58 views
3

我正在使用下面的代码片段将HTTP响应下载到本地文件。 有时我在url中的内容是多语言的(中文,日文,泰文数据等)。 我正在使用ContentEncoding标头来指定我的内容是使用UTF-8编码,但是这对我以ASCII生成的本地输出文件没有任何影响。因此,多语言数据已损坏。任何帮助?HttpRequestHeader内容编码问题

using (var webClient = new WebClient()) 
     { 
      webClient.Credentials = CredentialCache.DefaultCredentials; 
      webClient.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/4.0"); 
      webClient.Headers.Add(HttpRequestHeader.ContentEncoding, "utf-8"); 

      webClient.DownloadFile(url, @"c:\temp\tempfile.htm"); 
     } 
+0

UTF-8是ASCII ... – 2012-07-17 22:06:51

+0

如果你想支持宽字符,你应该使用类似于utf-16的东西 – 2012-07-17 22:07:40

+1

UTF8不是ASCII/ANSI,但是UTF8支持ASCII字符集。 – Mahender 2012-07-17 23:00:10

回答

6

ContentEncoding头不用于指定字符集。它被客户用来说明它支持什么样的编码(压缩)。

客户端无法告诉服务器要发送什么字符集。服务器发送它的数据和一些标题字段,说明正在使用什么字符集。通常它在ContentType标题中,并且看起来像:text/html; charset=UTF-8

当您使用WebClient时,您希望将Encoding属性设置为备用,以便如果服务器不识别字符集,则将使用默认值。例如:

WebClient client = new WebClient(); 
client.Encoding = Encoding.UTF8; 
string s = client.DownloadString(DownloadUrl); 

请参阅http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=800了解更多信息。