Ошибка в некоторых символах для преобразования из 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.