Как преобразовать строку из ISO 8859-1 в UTF-8? C # Windows Phone 7 - - PullRequest
0 голосов
/ 26 февраля 2012

мой вопрос очень прост, но на данный момент я не знаю, как это сделать. У меня есть строка в формате ISO-8859-1, и мне нужно преобразовать эту строку в UTF-8. Мне нужно сделать это в C # на Windows Phone 7 SDK. Как мне это сделать? Спасибо

Ответы [ 2 ]

3 голосов
/ 26 февраля 2012

Два уточнения по предыдущим ответам:

Не существует метода Encoding.GetText (если он не был введен специально для платформы WP7). Предполагается, что метод должен быть Encoding.GetString.

Метод Encoding.GetString принимает параметр byte[], а не string. Все строки в .NET внутренне представлены как UTF-16; нет способа иметь «строку в формате ISO-8859-1». Таким образом, вы должны быть осторожны с тем, как вы читаете ваш источник (файл, сеть), а не как вы обрабатываете свою строку.

Например, для чтения из текстового файла, закодированного в ISO-8859-1, вы можете использовать:

string text = File.ReadAllText(path, Encoding.GetEncoding("iso-8859-1"));

Чтобы сохранить в текстовый файл, закодированный в UTF-8, вы можете использовать:

File.WriteAllText(path, text, Encoding.UTF8);

Ответить на комментарий:

Да. Вы можете использовать Encoding.GetString для декодирования вашего байтового массива (при условии, что он содержит символьные значения для текста в определенной кодировке) в string и Encoding.GetBytes для преобразования вашего string обратно в байтовый массив (возможно, другого кодирование), как показано в других ответах.

Понятие «кодирование» относится к тому, как следует интерпретировать последовательности байтов (будь то массив byte[] в памяти или содержимое файла на диске). Класс string не обращает внимания на кодировку, из которой текст был прочитан или должен быть сохранен.

3 голосов
/ 26 февраля 2012

На странице MSDN для Encoding class перечислены распознанные кодировки.

28591 iso-8859-1 Западноевропейский (ISO)

ДляВаш вопрос правильный выбор iso-8859-1, который вы можете передать Encoding.GetEncoding.

var inputEncoding = Encoding.GetEncoding("iso-8859-1");
var text = inputEncoding.GetString(input);
var output = Encoding.Utf8.GetBytes(text);
...