Декодирование C# в TM

на веб-странице есть следующая строка

«Qualcomm Snapdragon™ S4»

когда я получаю эту строку в своем коде .net, строка преобразуется в «Qualcomm Snapdragon™ S4»

символ «TM» меняется на ™

как я могу расшифровать "™" обратно в "ТМ"

Обновлять

следующий код для загруженной строки с использованием веб-прокси
wc - это веб-прокси

wc.Headers.Add("Accept-Charset", "ISO-8859-1,utf-8");
string html = Server.HtmlEncode(wc.DownloadString(url));

person Abdul Basit    schedule 19.08.2013    source источник
comment
Как вы получаете этот код .net? Кажется, что-то пошло не так.   -  person Henk Holterman    schedule 19.08.2013
comment
@ Хенк Холтерман ... на самом деле строка исходит из декодированного html-текста ....   -  person Abdul Basit    schedule 19.08.2013
comment
дубликат stackoverflow.com/questions/3400002/   -  person Khadim Ali    schedule 19.08.2013
comment
@AbdulBasit - ошибка, вероятно, заключается в том, как вы ее декодируете ... Так что на это нет ответа.   -  person Henk Holterman    schedule 19.08.2013
comment
Покажите код, в котором вы извлекаете веб-страницу и создаете строку .NET. Где-то вам нужно указать Encoding.UTF8, потому что это кодировка, которую использует веб-страница. Или, что еще лучше, обратите внимание на то, какую кодировку утверждает веб-сервер, и уважайте эту кодировку.   -  person Jeppe Stig Nielsen    schedule 19.08.2013
comment
Затем попробуйте wc.Encoding = Encoding.UTF8; перед wc.DownloadString.   -  person Jeppe Stig Nielsen    schedule 19.08.2013


Ответы (1)


Вы должны прочитать веб-страницу в ее правильной кодировке в первую очередь. В этом случае кажется, что вы читаете с Encoding.Default (то есть, вероятно, CP1252), и страница действительно в UTF-8. Это должно быть очевидно либо при чтении заголовка Content-Type ответа, либо при поиске <meta http-equiv="Content-Type" content='text/html; charset=utf-8'> в содержимом.

Если вам все еще нужно сделать это постфактум, используйте

var bytes = Encoding.Default.GetBytes(myString);
var correctString = Encoding.UTF8.GetString(bytes);

В любом случае вам необходимо знать точные кодировки, которые использовались на странице и для чтения искаженной строки в первую очередь. Кроме того, я бы вообще не советовал использовать Encoding.Default, потому что его значение не является фиксированным. Это просто устаревшая кодировка в системе Windows для использования в приложениях, отличных от Unicode, а также используется в качестве кодировки текстового файла, отличной от Unicode, по умолчанию. Ему не должно быть места в работе с внешними ресурсами.

person Joey    schedule 19.08.2013
comment
Это то, что я сделал. не могли бы вы помочь мне, что не так в этом коде..... wc.Headers.Add(Accept-Charset, ISO-8859-1,utf-8); строка html = Server.HtmlEncode (wc.DownloadString (url)); - person Abdul Basit; 19.08.2013
comment
Accept-Charset — это всего лишь подсказка серверу, он не обязан ее соблюдать. Хотя в данном случае это явно произошло, отправив UTF-8, что, как вы сказали, было приемлемым. Однако DownloadString должен использовать кодировку, указанную в ответе, для декодирования тела. Таким образом, очевидно, сервер ничего не отправляет или неверные значения (к сожалению, очень часто). В этом случае, если вы знаете, что это UTF-8, вы можете просто использовать вместо этого DownloadData и самостоятельно декодировать его в строку. - person Joey; 19.08.2013
comment
Также см. мой комментарий к вопросу. Существует свойство wc.Encoding, которое можно установить. Вероятно, веб-сервер рассматривает UTF-8 как стандартную кодировку, которую, по его мнению, не нужно объявлять. - person Jeppe Stig Nielsen; 19.08.2013
comment
@Jeppe, также может случиться так, что ответ не объявляет кодировку, а вместо этого объявляет HTML. Но это то, что WebClient не улавливает. - person Joey; 19.08.2013