我有一个波斯语单词,如果以UTF-8编码显示,就像这样:
"خطاب"
我有两个版本的这个词,在UTF-8的Notepad ++中都显示如上。 但如果我在ANSI模式下查看它们,我会看到:
ïºïºŽï»„ﺧ
而另一个我看到了:
خطاب
为什么相同的单词在ANSI格式中有这么不同的表示?当我在Python中使用PIL绘制这些时,结果对于其中一个是正确的而对另一个不正确。
我很感激你的帮助。
答案 0 :(得分:2)
在Unicode中,您可以通过多种方式表示某些字符。 在这种情况下,这些阿拉伯字符在第一种情况下使用Arabic Presentation Forms-B Block的代码点表示,在第二种情况下使用常规Arabic Block的代码点表示。
如果您转换文字
ïºïºŽï»“ﺧ
到字节流,你得到
EFBA 0F EFBA8E EFBB84 EFBAA7
请注意,您没有在上面的文本中看到代表0F
字节的字符,因为它是非可视字符。
现在该字节流表示UTF-8编码的文本。解码它将为您提供以下Unicode代码点:
FE8F FE8E FEC4 FEA7
您可以匹配Arabic Presentation Forms-B Block中的那些以形成您的波斯语文字:
خطاب
您可以对其他文本执行相同的过程:خطاب
为您提供字节流D8AE D8B7 D8A7 D8A8
,它表示UTF-8编码的文本,解码后会为您提供Unicode代码点{{1 }},与常规Arabic Block匹配,再次为您提供文字062e 0637 0627 0628
。