2016-12-14 68 views
1

我試圖通過webclient獲取字符串,它具有日文字符,但它顯示了這些字符,^p Ǘ 。無法使用UTF-8獲取網頁內容

var url= "http://www.itmedia.co.jp/im/articles/0609/14/news117.html"; 

using (var w = new WebClient()) 
{ 
    w.Encoding = Encoding.UTF8; 
    var htmlData= w.DownloadString(url); 
} 

json_data的值不顯示日文字符。

您能指教我爲什麼即使將其編碼爲UTF-8也不會轉換爲日文字符?

+1

在Firefox下載並執行「工具」 - >「頁面信息」,你會看到編碼實際上是Shift_JIS。請參閱[本答案](http://stackoverflow.com/a/30049848/3744182)瞭解如何使WebClient自動檢測編碼。 – dbc

+0

@dbc ^這完全是最好的答案。謝啦。 – Dean

回答

1

據視圖源的第三行,它編碼在移位JIS:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html lang="ja" id="masterChannel-enterprise"><head> 
<meta http-equiv="content-type" content="text/html;charset=shift_jis"> 
+0

但是,如果您沒有編碼權限,則無法進入該行。嘗試想象如果你是瀏覽器,你會做什麼。該代碼是UTF-8編碼的。 –

0

如果使用郵遞員打開頁面,則可以看到響應的標題。

Postman

正如你可以在圖片中看到,響應gzip壓縮。這可能會導致你看到的混亂的迴應。

WebClient時下支持自動解壓gzip,但it wasn't that way always。 (如果我在Windows 10上的.NET 4.6.2上運行你的代碼,我確實得到了正確的結果)可能你是針對早期版本的不支持gzip解壓縮的.NET Framework。鏈接的帖子應該解決這個問題。

-1
var url = "http://www.itmedia.co.jp/im/articles/0609/14/news117.html"; 

       using (var w = new WebClient()) 
       { 
        w.Encoding = Encoding.GetEncoding("ISO-8859-1"); 
        var htmlData = w.DownloadString(url); 
       } 
0

我改變了代碼從UTF-8至shift_jis訪問。

w.Encoding = Encoding.GetEncoding("shift_jis");