从utf8转换为latin1的某些字符出错

时间:2016-03-09 12:09:45

标签: c# text unicode persian

我使用下面的代码将UTF8(波斯字符)转换为LATIN1。

但它不适用于某些角色,如(ویه)

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

2 个答案:

答案 0 :(得分:1)

  

我使用下面的代码将UTF8(波斯字符)转换为LATIN1。

ISO-8859-1不能包含波斯语字符。你正在做的是故意犯mojibake错误。

如果您的代码正在执行某些功能,则意味着有一些其他组件从des获取输出并对其进行错误处理(即,当它本来应该使用UTF时,将其输出为类似拉丁语的编码-8)。如果你可以,那么将问题解决到下游会好得多,而不是试图通过故意编码来解决它。

如果你真的必须以这种方式处理它,并且有些角色可以工作,但是其他角色没有,可能是你试图瞄准的类似拉丁语的编码实际上并不是真正的拉丁语-1(ISO-8859- 1);最可能的原因是它是Windows代码页1252.它与ISO-8859-1共享许多相同的字符映射,但不是全部。所以试试GetEncoding(1252)

答案 1 :(得分:0)

拉丁语1更倾向于拉丁语Alphabeth(如果你只是为了这个目标就很好),而UTF8可以代表任何 Unicode字符集,不仅仅是韦斯特欧洲国家,还有东欧人。 大多数字符都是相同的但存在一些差异。请查看UTF8Latin1的字符集。