C#-WebClient.DownloadString未检测到响应编码

本文关键字:响应 编码 检测 DownloadString C#-WebClient | 更新日期: 2023-09-27 18:26:53

当我使用WebClient类时,我注意到像这个这样的简单调用

string downloadedString = new WebClient().DownloadString("http://whatever");

即使响应包含正确的Content-Type报头application/json; charset=utf-8

当我查看源代码时,我发现DownloadString根本不查看响应标头。相反,它使用request.ContentType,如果不存在字符集,它将使用Encoding属性(必须事先设置,否则它将是系统的默认值)。

奇怪的是,在发送请求之前,我们必须特别告诉WebClient对象要使用哪种编码(通过添加Content-Type标头或直接设置编码)。使用DownloadString变得毫无意义:如果我们想要正确的编码,我们必须使用DownloadData或普通的旧WebRequest,并编写手动解析响应标头的代码,以获得正确的响应字符串。

有人知道这种行为的原因吗?在.NET中,是否有比手动解析响应Content-Type更好的方法来正确下载HTTP字符串响应?

C#-WebClient.DownloadString未检测到响应编码

WebClient源代码似乎表明,当您调用DownloadString时,它使用请求内容类型作为响应的编码,这很奇怪,可能是一个错误。

看看这个类似问题的绝妙答案。它包含使用DownloadData获取响应的代码,然后使用响应的Content-Type标头中指定的正确编码将其转换为字符串。