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字符串响应?
WebClient源代码似乎表明,当您调用DownloadString
时,它使用请求内容类型作为响应的编码,这很奇怪,可能是一个错误。
看看这个类似问题的绝妙答案。它包含使用DownloadData
获取响应的代码,然后使用响应的Content-Type
标头中指定的正确编码将其转换为字符串。