【问题标题】:WebClient.DownloadString uses wrong encodingWebClient.DownloadString 使用错误的编码
【发布时间】:2018-01-03 13:10:14
【问题描述】:

我正在使用 webclient 从 sharepoint 在线下载 XML 文件。

但是,当我使用WebClient.DownloadString(string url) 方法时,某些字符没有正确解码。

当我使用WebClient.DownloadFile(string url, string file) 然后我读取文件时,所有字符都是正确的。

xml 本身不包含编码声明。

string wrongXml = webClient.DownloadString(url);
//wrongXml contains Ä™ instead of ę

webClient.DownloadFile(url, @"C:\temp\file1.xml");
string correctXml = File.ReadAllText(@"C:\temp\file1.xml");
//contains ę, like it should.

另外,在 Internet Explorer 中打开 url 时,显示正确。

这是为什么呢?是因为我机器上的默认 windows 编码还是 webclient 在使用 DownloadString 时处理响应不同,resp DownloadFile?

【问题讨论】:

  • 仅供参考,您应该使用首选的HttpClient 而不是旧的WebClient
  • @CamiloTerevinto:哦,是的,这确实解决了问题。您应该将其添加为答案

标签: c# .net character-encoding webclient


【解决方案1】:

可能它现在使用的编码不是服务返回的编码。

您可以在发出请求之前设置您期望的编码:

webClient.Encoding = Encoding.UTF8;
string previouslyWrongXml = webClient.DownloadString(url);

【讨论】:

  • 很高兴知道,但如果我不知道编码怎么办。
  • 我想知道服务是否在标头中返回了正确的编码。如果是这样,您可以使用它来读取响应字节并将它们转换为正确的编码。那时你可能需要HttpWebRequest,但我不确定是否可以使用WebClient
  • 它包含:Content-Disposition: attachment; filename*=UTF-8'aaa.xml; filename="aaa.xml",所以我可以在使用 HttpWebRequest 时使用它,但是由于在我的情况下它似乎一直都是一样的,所以我将它设置为 webclient
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-08
相关资源
最近更新 更多