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

以下代码:

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

结果生成一个变量 text,其中包含字符串等许多内容

“ $Îo $- Minkowski 空间,标量场和 Lorentz 不变性问题”

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

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

事实上是正确的,我也试过

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);

但这也带来了同样的问题。

我不知道错在哪里。提要是否隐瞒了 UTF8编码,而且浏览器足够聪明,能够识别出来,但是不能识别 WebClient?提要是否正确地使用 UTF8编码,但 WebClient是否以其他方式失败?我能做些什么来缓解这种情况呢?

43470 次浏览

It's not lying. You should set the webclient's encoding first before calling DownloadString.

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");
}

As for why your alternative isn't working, it's because the usage is incorrect. Its should be:

System.Text.Encoding.UTF8.GetString()