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

.net WebClient.DownloadString由于编码问题导致字符损坏,但浏览器正常,.net,unicode,utf-8,webclient,.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 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
?提要是否正确进行UTF8编码,但
WebClient
以其他方式出现故障?我能做些什么来缓解这种情况呢?

这不是撒谎。在调用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()

UTF8Encoding.Default
实际上是
Encoding.Default
,它是基于操作系统语言设置的ANSI编码。可能与卓越的重复,谢谢!奇怪的是,
WebClient
没有使用头文件来检测这个,但是它工作得很好,在你和@svick之间,我理解为什么我尝试的另一件事也失败得很惨。同样适用于
UploadString