2013-12-12 15 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匹配,再次給出文本خطاب

相關問題