簡體   English   中英

C#-WebClient.DownloadString無法檢測到響應編碼

[英]C# - WebClient.DownloadString does not detect response encoding

當我使用WebClient類時,我注意到一個像這樣的簡單調用

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

即使響應包含正確的Content-Type標頭application/json; charset=utf-8 ,也會使用錯誤的編碼生成字符串application/json; charset=utf-8 application/json; charset=utf-8

當我查看源代碼時,我發現DownloadString根本沒有查看響應頭。 相反,它使用request.ContentType ,如果那里不存在字符集,則使用Encoding屬性(必須事先設置,否則將是系統的默認值)。

看起來很奇怪,我們必須在發送請求之前專門告訴WebClient對象要使用哪種編碼(通過添加Content-Type標頭或直接設置編碼)。 使用DownloadString變得毫無意義:如果我們想要正確的編碼,則必須使用DownloadData或普通的WebRequest並編寫代碼以手動解析響應標頭以獲取正確的響應字符串。

有人知道這種行為的原因嗎? .NET中有比手動解析響應Content-Type更好的方法來正確下載HTTP字符串響應嗎?

WebClient 源代碼似乎表明,當您調用DownloadString它使用請求內容類型作為響應的編碼,這很奇怪,而且很可能是錯誤。

看到這個類似問題的出色答案 它包含使用DownloadData獲取響應,然后使用響應的Content-Type標頭中指定的正確編碼將其轉換為字符串的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM