由于编码问题,WebClient.DownloadString导致损坏的字符,但浏览器没问题

时间:2011-08-21 08:10:55

标签: .net unicode utf-8 webclient

以下代码:

var text = (new WebClient()).DownloadString("http://export.arxiv.org/api/query?search_query=au:Freidel_L*&start=0&max_results=20"));

会产生一个变量text,其中包含字符串

  

“$κ$ -Minkowski空间,标量场和洛伦兹不变性问题”

然而,当我在Firefox中访问该URL时,我得到了

  

$κ$ -Minkowski空间,标量场和洛伦兹不变性问题

这实际上是正确的。我也试过

var data = (new WebClient()).DownloadData("http://export.arxiv.org/api/query?search_query=au:Freidel_L*&start=0&max_results=20");
var text = System.Text.UTF8Encoding.Default.GetString(data);

但这也给出了同样的问题。

我不确定这里的错误在哪里。 Feed是否是UTF8编码的,浏览器足够聪明,可以解决这个问题,但不是WebClient? Feed是否正确UTF8编码,但WebClient以其他方式失败?我该怎么做才能缓解这种情况?

1 个答案:

答案 0 :(得分:185)

这不是谎言。您应该在调用DownloadString之前先设置webclient的编码。

using(WebClient webClient = new WebClient())
{
webClient.Encoding = Encoding.UTF8;
string s = webClient.DownloadString("http://export.arxiv.org/api/query?search_query=au:Freidel_L*&start=0&max_results=20");
}

至于为什么你的选择不起作用,这是因为用法不正确。它应该是:

System.Text.Encoding.UTF8.GetString()