2013-07-10 4 views
0

Я получил эту строку, возвращаемую через HTTP Post от URL в C# приложения, который содержит некоторые китайский символ, например:Преобразование строки в кодировке utf8 в юникод в C#

Gelatos® Colors Gift Set中文 

проблема, я хочу преобразовать его в

Gelatos® Colors Gift Set中文 

Обе строки на самом деле идентичны, но кодируются по-разному. Я понимаю, что на C# все есть UTF16. Я пробовал читать alof сообщений здесь относительно перехода от одной кодировки к другой, но не повезло.

Надеюсь, кто-то может помочь.

Вот 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)

%> 

вывод из Интернета правильный. Но я просто задавался вопросом, сделаны ли какие-то изменения в потоке http в приложении C#.

спасибо.

+0

Какие функции преобразования вы пытались, а что не так? – shfire

+0

Yip: Не могли бы вы показать нам код, отвечающий за HTTP POST, который генерирует строку? – Douglas

ответ

0

Если сервер действительно возвращает текст UTF-8, вы можете настроить свой WebClient, установив его свойство Encoding. Это устраняет необходимость в последующих преобразованиях.

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

Спасибо Douglas .... Наконец-то это правильно. ASP возвращает UTF8, и, таким образом, C# отображает верную строку. –

1

Загрузите веб-страницы в качестве байтов в первую очередь. Затем преобразуйте байты в правильную кодировку.

Первым преобразованием его с использованием неправильной кодировки вы, вероятно, потеряете данные. Особенно с использованием ASCII.

+0

спасибо, но как вы загружаетесь с URL-адреса с использованием определенной кодировки? –

+1

Хорошо, получил часть загрузки, используя byte [] response = new System.Net.WebClient(). DownloadData (url); –

Смежные вопросы