2013-12-12 18 views
1

不同表示我有一个波斯语字,如果示于UTF-8编码是这样的:两个单词与UTF-8相同的表示有在ASCII

"خطاب" 

我有该单词的两个版本,在UTF-8的Notepad ++中都如上所示。 但是,如果我看着他们在ANSI模式下,然后我看到:

ïºïºŽï»„ﺧ 

和另外一个我看:

خطاب  

为什么同样的话在ANSI格式,不同的表现?当我在Python中使用PIL来绘制它们时,结果对于其中的一个是正确的,对于另一个不正确。

我欣赏这方面的任何帮助。

+1

它[取决于您的系统设置](http://stackoverflow.com/a/701920/847349)。 ANSI可能不包含波斯语代码页 –

+2

如果您正在以ANSI编码解释UTF-8编码文件,那么您当然会看到垃圾字符。这不是关于他们“具有不同的表示”,而是关于以不正确的编码解释文件。请参阅[每个程序员都绝对,积极需要了解编码和字符集以处理文本](http:// kunststube。净/编码/)。 – deceze

+0

@deceze非常感谢您的链接,我会一一阅读。但是,即使在ANSI编码中,我也应该看到垃圾,不应该两个都显示相同的垃圾吗? – TJ1

回答

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代码点062e 0637 0627 0628,它与常规Arabic Block匹配,再次给出文本خطاب

相关问题