2012-07-17 42 views
3

我正在使用下面的代碼片段將HTTP響應下載到本地文件。 有時我在url中的內容是多語言的(中文,日文,泰文數據等)。 我正在使用ContentEncoding標頭來指定我的內容是使用UTF-8編碼,但是這對我以ASCII生成的本地輸出文件沒有任何影響。因此,多語言數據已損壞。任何幫助?HttpRequestHeader內容編碼問題

using (var webClient = new WebClient()) 
     { 
      webClient.Credentials = CredentialCache.DefaultCredentials; 
      webClient.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/4.0"); 
      webClient.Headers.Add(HttpRequestHeader.ContentEncoding, "utf-8"); 

      webClient.DownloadFile(url, @"c:\temp\tempfile.htm"); 
     } 
+0

UTF-8是ASCII ... – 2012-07-17 22:06:51

+0

如果你想支持寬字符,你應該使用類似於utf-16的東西 – 2012-07-17 22:07:40

+1

UTF8不是ASCII/ANSI,但是UTF8支持ASCII字符集。 – Mahender 2012-07-17 23:00:10

回答

6

ContentEncoding頭不用於指定字符集。它被客戶用來說明它支持什麼樣的編碼(壓縮)。

客戶端無法告訴服務器要發送什麼字符集。服務器發送它的數據和一些標題字段,說明正在使用什麼字符集。通常它在ContentType標題中,並且看起來像:text/html; charset=UTF-8

當您使用WebClient時,您希望將Encoding屬性設置爲備用,以便如果服務器不識別字符集,則將使用默認值。例如:

WebClient client = new WebClient(); 
client.Encoding = Encoding.UTF8; 
string s = client.DownloadString(DownloadUrl); 

請參閱http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=800瞭解更多信息。