C# Преобразовывают строку от UTF-8 до ISO-8859-1 (Latin1) H

Я погуглил по этой теме, и я посмотрел на каждый ответ, но я все еще не получаю его.

В основном я должен преобразовать строку UTF-8 в ISO-8859-1, и я делаю это использование после кода:

Encoding iso = Encoding.GetEncoding("ISO-8859-1");
Encoding utf8 = Encoding.UTF8;
string msg = iso.GetString(utf8.GetBytes(Message));

Моя исходная строка

Message = "ÄäÖöÕõÜü"

Но к сожалению моя строка результата становится

msg = "�ä�ö�õ�ü

Что я делаю неправильно здесь?

96
задан Tieme 29 January 2016 в 13:35
поделиться

4 ответа

Используйте Encoding.Convert , чтобы настроить массив байтов, прежде чем пытаться декодировать его в целевую кодировку. .

Encoding iso = Encoding.GetEncoding("ISO-8859-1");
Encoding utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(Message);
byte[] isoBytes = Encoding.Convert(utf8, iso, utfBytes);
string msg = iso.GetString(isoBytes);
163
ответ дан 24 November 2019 в 05:36
поделиться

Попробуйте следующее:

Encoding iso = Encoding.GetEncoding("ISO-8859-1");
Encoding utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(Message);
byte[] isoBytes = Encoding.Convert(utf8,iso,utfBytes);
string msg = iso.GetString(isoBytes);
14
ответ дан 24 November 2019 в 05:36
поделиться

Я думаю, ваша проблема в том, что вы предполагаете, что байты, представляющие строку utf8, приведут к той же строке при интерпретации как что-то еще (iso-8859-1). А это просто не так. Я рекомендую вам прочитать эту замечательную статью Джоэла Спольски.

23
ответ дан 24 November 2019 в 05:36
поделиться

В первую очередь вам нужно исправить источник строки.

Строка в .NET на самом деле представляет собой просто массив 16-битных кодовых точек Юникода, символов, поэтому строка не находится в какой-либо конкретной кодировке.

Когда вы берете эту строку и конвертируете ее в набор байтов, эта кодировка вступает в игру.

В любом случае, как вы это сделали, вы кодировали строку в Как видите, байтовый массив с одним набором символов, а затем его декодирование с помощью другого, не сработает.

Не могли бы вы рассказать нам больше о том, откуда взялась эта исходная строка и почему, по вашему мнению, она была неправильно закодирована?

8
ответ дан 24 November 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: