[英]encoding unicode using UTF-8
在 Python 中,如果我輸入
euro = u'\u20AC'
euroUTF8 = euro.encode('utf-8')
print(euroUTF8, type(euroUTF8), len(euroUTF8))
輸出是
('\xe2\x82\xac', <type 'str'>, 3)
我有兩個問題: 1. 看起來 euroUTF8 編碼超過 3 個字節,但是如何獲取其二進制表示以查看它包含多少位? 2. '\\xe2\\x82\\xac'
中的'x'
'\\xe2\\x82\\xac'
是什么意思? 我不認為'x'
是一個十六進制數。 為什么有三個'\\'
?
在 Python 2 中, print
是一個語句,而不是一個函數。 您正在此處打印一個元組。 通過刪除(..)
打印各個元素:
>>> euro = u'\u20AC'
>>> euroUTF8 = euro.encode('utf-8')
>>> print euroUTF8, type(euroUTF8), len(euroUTF8)
€ <type 'str'> 3
現在您將 3 個單獨的對象作為字符串寫入 stdout; 我的終端恰好被配置為將寫入它的任何內容解釋為 UTF-8,因此字節正確導致顯示€
歐元符號。
\\x<hh>
序列是Python 字符串文字轉義序列(請參閱參考文檔); 它們是應用於包含非 ASCII、不可打印字節的字符串的repr()
的默認輸出。 在交互式解釋器中回顯值時,您將看到相同的內容:
>>> euroUTF8
'\xe2\x82\xac'
>>> euroUTF8[0]
'\xe2'
>>> euroUTF8[1]
'\x82'
>>> euroUTF8[2]
'\xac'
它們為您提供 ASCII 安全的調試輸出。 所有 Python 標准庫容器的內容都使用這種格式; 包括列表、元組和字典。
如果要格式化以查看組成這些值的位,請使用ord()
函數將每個字節轉換為整數,然后將整數格式化為二進制:
>>> ' '.join([format(ord(b), '08b') for b in euroUTF8])
'11100010 10000010 10101100'
每種編碼中的每個字母都使用不同的位數表示。 UTF-8 是 8 位編碼,因此無需獲取二進制表示即可了解每個字符的每個位計數。 (如果您仍想呈現位,請參閱 Martijn 的回答。)
\\x
表示后面的值是一個字節。 所以 x 不是你應該轉換或讀取的十六進制數字。 它標識了您感興趣的以下值。 \\
用於轉義x
,因為它們不是值的一部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.