Я погуглил по этой теме, и я посмотрел на каждый ответ, но я все еще не получаю его.
В основном я должен преобразовать строку 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 = "�ä�ö�õ�ü
Что я делаю неправильно здесь?
Используйте 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);
Попробуйте следующее:
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);
Я думаю, ваша проблема в том, что вы предполагаете, что байты, представляющие строку utf8, приведут к той же строке при интерпретации как что-то еще (iso-8859-1). А это просто не так. Я рекомендую вам прочитать эту замечательную статью Джоэла Спольски.
В первую очередь вам нужно исправить источник строки.
Строка в .NET на самом деле представляет собой просто массив 16-битных кодовых точек Юникода, символов, поэтому строка не находится в какой-либо конкретной кодировке.
Когда вы берете эту строку и конвертируете ее в набор байтов, эта кодировка вступает в игру.
В любом случае, как вы это сделали, вы кодировали строку в Как видите, байтовый массив с одним набором символов, а затем его декодирование с помощью другого, не сработает.
Не могли бы вы рассказать нам больше о том, откуда взялась эта исходная строка и почему, по вашему мнению, она была неправильно закодирована?