[英]Unicode utf-8/utf-16 encoding in Python
在python中:
u'\u3053\n'
是utf-16嗎?
我並不是真的知道所有unicode /編碼的東西,但是這種類型的東西出現在我的數據集中,就像我有a=u'\こ\\n'
。
print
給出異常並且解碼給出異常。
a.encode("utf-16") > '\xff\xfeS0\n\x00'
a.encode("utf-8") > '\xe3\x81\x93\n'
print a.encode("utf-8") > πüô
print a.encode("utf-16") > ■S0
這里發生了什么?
它是一個unicode字符,似乎在您的終端編碼中無法顯示。 print
嘗試在終端的編碼中對unicode對象進行編碼,如果無法完成,則會出現異常。
在可以顯示utf-8的終端上,您將獲得:
>>> print u'\u3053'
こ
您的終端似乎無法顯示utf-8,否則至少print a.encode("utf-8")
行應該生成正確的字符。
你問:
U '\\ u3053 \\ N'
是utf-16嗎?
答案是否定的:它是unicode,而不是任何特定的編碼。 utf-16是一種編碼。
要有效地將Unicode字符串打印到終端,您需要找出該終端願意接受和能夠顯示的編碼。 例如,我的筆記本電腦上的Terminal.app設置為UTF-8並且具有豐富的字體,因此:
(來源: aleax.it )
......平假名字母顯示正確。 在Linux工作站上,我有一個終端程序,它會一直重置為Latin-1,所以它會像你的一樣亂碼 - 我可以將它設置為utf-8,但字體中沒有大量的字形,所以它會顯示一些無用的占位符字形。
字符U + 3053“HIRAGANA LETTER KO”。
UTF-16二進制格式開頭的\\xff\\xfe
位是編碼的字節順序標記(U + FEFF),然后“S0”是\\x5e\\x30
,然后是原始字符串中的\\n
。 (每個字符的字節都“反轉”,因為它使用的是小端UTF-16編碼。)
UTF-8表單以三個字節表示相同的平假名字符,其中的位模式如此處所述 。
現在,至於你是否應該在數據集中真正擁有它......這些數據來自何處? 它中有平假名字符是否合理?
這是Python 2.6.2的Unicode HowTo Doc:
http://docs.python.org/howto/unicode.html
另請參閱該文檔參考部分中的鏈接以獲取其他解釋,包括Joel Spolsky的解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.