Ошибка в некоторых символах для преобразования из utf8 в latin1

Я использую код ниже для конвертации UTF8 (персидские символы) в LATIN1.

но это не работает для некоторых персонажей, таких как (و ی ه)

Encoding iso = Encoding.GetEncoding("ISO-8859-1");
Encoding utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(source);
string des = iso.GetString(utfBytes);

2 ответа

Решение

Я использую код ниже для конвертации UTF8 (персидские символы) в LATIN1.

ISO-8859-1 не может содержать персидские символы. То, что вы делаете, преднамеренно совершает ошибку моджибаке.

Если ваш код выполняет что-то функциональное, это означает, что есть какой-то другой компонент, принимающий вывод из des и неправильно обрабатывает его (т. е. выдает его в виде латино-подобной кодировки, когда он должен был изначально использовать UTF-8). Если вы вообще можете, было бы гораздо лучше исправить эту проблему в нисходящем направлении, вместо того, чтобы пытаться обходить ее намеренно плохим кодированием.

Если вам действительно нужно обрабатывать это таким образом, и некоторые символы работают, но другие этого не делают, то вероятность того, что кодировка, подобная латинице, на которую вы пытаетесь нацелиться, на самом деле не является настоящей Латинской-1 (ISO-8859-1); наиболее вероятная причина этого заключается в том, что это кодовая страница Windows 1252. Она разделяет многие из тех же сопоставлений символов, что и ISO-8859-1, но не все. Так что постарайтесь GetEncoding(1252),

Latin1 в большей степени ориентирован на латинскую алфавиту (что хорошо, если вы только нацеливаетесь на это), и UTF8 может представлять любую кодировку Unicode, не только западноевропейские страны, но и восточноевропейские. Большинство персонажей одинаковы, но есть некоторые различия. Взгляните на кодировки UTF8 и Latin1.

Другие вопросы по тегам