2013-07-10 151 views
0

我有這個字符串通過HTTP POST從URL在C#應用程序返回,包含一些中國字如爲Unicode:轉換爲UTF8編碼的字符串在C#

Gelatos® Colors Gift Set中文 

問題是,我想將其轉換爲

Gelatos® Colors Gift Set中文 

這兩個字符串實際上都是相同的,但編碼方式不同。我明白在C#中一切都是UTF16。我試過讀過關於從一種編碼轉換到另一種編碼的帖子,但沒有運氣。

希望有人可以幫忙。

這裏的C#代碼:

WebClient wc = new WebClient(); 
json = wc.DownloadString("http://mysite.com/ext/export.asp"); 

textBox2.Text = "Receiving orders...."; 

//convert the string to UTF16 
     Encoding ascii = Encoding.ASCII; 
     Encoding unicode = Encoding.Unicode; 
     Encoding utf8 = Encoding.UTF8; 

     byte[] asciiBytes = ascii.GetBytes(json); 
     byte[] utf8Bytes = utf8.GetBytes(json); 
     byte[] unicodeBytes = Encoding.Convert(utf8, unicode, utf8Bytes); 

     string sOut = unicode.GetString(unicodeBytes); 

System.Windows.Forms.MessageBox.Show(sOut); //doesn't work... 

下面是從服務器的代碼:

<%@CodePage = 65001%> 
<%option explicit%> 
<% 
Session.CodePage = 65001 
Response.charset ="utf-8" 
Session.LCID  = 1033 'en-US 

..... 的Response.Write(strJSON)

%> 

的網絡輸出是正確的。但我只是想知道是否對C#應用程序的http流進行了一些更改。

謝謝。

+0

你試過了什麼樣的轉換函數,怎麼回事? – shfire

+0

Yip:你能告訴我們負責生成字符串的HTTP POST的代碼嗎? – Douglas

回答

0

如果服務器真的返回UTF-8文本,則可以通過設置其Encoding屬性來配置WebClient。這將消除後續轉換的任何需求。

using (WebClient wc = new WebClient()) 
{ 
    wc.Encoding = Encoding.UTF8; 
    json = wc.DownloadString("http://mysite.com/ext/export.asp"); 
} 
+0

謝謝道格拉斯....最後得到這個權利。 ASP確實會返回UTF8,因此C#會顯示返回的正確字符串。 –

1

首先將網頁下載爲字節。然後,將字節轉換爲正確的編碼。

通過首先使用錯誤的編碼轉換它,您可能會丟失數據。尤其是使用ASCII。

+0

謝謝,但你如何使用特定的編碼從URL下載? –

+1

好的,下載部分使用byte [] response = new System.Net.WebClient()。DownloadData(url); –

相關問題