簡體   English   中英

Python中的Unicode utf-8 / utf-16編碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM