WebClient.DownloadString由于编码问题而导致字符错乱,但浏览器正常

以下代码:

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

会产生一个variablestext ,其中包含string

“$κ$ –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以其他方式失败? 我可以做些什么来减轻这一点?

这不是说谎 在调用DownloadString之前,您应该先设置Web客户端的编码。

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

至于为什么你的select不工作,这是因为使用不正确。 它应该是:

 System.Text.Encoding.UTF8.GetString()