当我在使用WebClient
课程时,我注意到像这样的简单调用
string downloadedString = new WebClient().DownloadString("http://whatever");
使用不正确的编码生成了一个字符串,即使该响应包含正确的Content-Type
标题application/json; charset=utf-8
。
当我查看source code时,我发现DownloadString
根本没有看到响应标头。相反,它使用request.ContentType
,如果那里不存在字符集,它使用Encoding
属性(必须事先设置,否则它将是系统的默认值)。
我们必须在发送请求之前专门告诉WebClient
对象使用哪种编码(通过添加Content-Type
标头或直接设置编码),这似乎很奇怪。使用DownloadString
变得毫无意义:如果我们想要正确的编码,我们必须使用DownloadData
或普通的旧WebRequest
并编写手动解析响应头的代码以获得正确的响应字符串。
有谁知道这种行为的原因?
.NET是否有更好的方法来正确下载HTTP字符串响应,而不是手动解析响应Content-Type
?
答案 0 :(得分:1)
WebClient source code似乎表示当您致电DownloadString
时,它会使用请求内容类型作为响应的编码,是奇怪的,可能是一个错误。
请参阅this excellent answer一个类似的问题。它包含使用DownloadData
获取响应的代码,然后使用正确的编码将其转换为字符串,如响应的Content-Type
标头中所指定。