ChatGPT解决这个技术问题 Extra ChatGPT

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

以下代码:

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

但这给出了同样的问题。

我不确定问题出在哪里。提要是否是 UTF8 编码的,浏览器是否足够聪明,可以弄清楚这一点,但不是 WebClient?提要是否正确 UTF8 编码,但 WebClient 以其他方式失败?我能做些什么来减轻这种情况?

UTF8Encoding.Default 实际上是 Encoding.Default,它是基于操作系统语言设置的 ANSI 编码。

K
Konamiman

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

非常好,谢谢!奇怪的是 WebClient 不使用标头来检测这一点,但这很有效,在你和@svick 之间,我理解为什么我尝试的另一件事也失败了。
也适用于 UploadString

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅