簡體   English   中英

Python 3中的UTF-16編碼和日語

[英]UTF-16 Encoding and Japanese in Python 3

我正在嘗試將日語字符編碼為UTF-16。 基本上模仿此在線工具的功能: https : //www.branah.com/unicode-converter

例如,

'インスタントグラム' 

應該成為

'\u30a4\u30f3\u30b9\u30bf\u30f3\u30c8\u30b0\u30e9\u30e0'

我正在使用以下代碼塊:

jp_example = 'インスタントグラム'
jp_example.encode('utf-16')

而是接收如下所示的輸出:

b'\xff\xfe\xa40\xf30\xb90\xbf0\xf30\xc80\xb00\xe90\xe00'

知道我缺少什么嗎? 我玩過其他編碼,但沒有任何效果。

FWIW,我正在將Jupyter Notebook與Python 3.6.3rc1 +配合使用。

您的預期輸出不是UTF-16 UTF-16是使用每碼點2個字節的編碼 ; Unicode的碼點U + 30A4 KATAKANA LETTER我 ,當在UTF-16字節表示為A4 30或30 A4十六進制,取決於上字節順序編碼器拾取

相反,您的預期輸出包含嵌入\\u\u003c/code>轉義中的Unicode代碼點。 此類轉義用於多種上下文中,包括Python字符串文字和JSON數據。

如果要生成JSON數據,請使用json.dumps()創建JSON字符串; 該字符串中ASCII字符集之外的任何代碼點都用\\uhhhh轉義序列表示:

>>> jp_example = 'インスタントグラム'
>>> import json
>>> print(json.dumps(jp_example))
"\u30a4\u30f3\u30b9\u30bf\u30f3\u30c8\u30b0\u30e9\u30e0"

否則,如果要生成Python字符串文字,請使用unicode_escape編解碼器;否則,請unicode_escape 這也輸出一個字節序列; 出於打印目的,我已經使用ASCII編解碼器再次將這些字節解碼為文本

>>> print(jp_example.encode('unicode_escape').decode('ascii'))
\u30a4\u30f3\u30b9\u30bf\u30f3\u30c8\u30b0\u30e9\u30e0

您需要絕對確定數據用途。 JSON和Python字符串文字表示法在基本多語言平面之外的代碼點方面有所不同,例如大多數Emoji:

>>> print(json.dumps('🐱👤'))
"\ud83d\udc31\ud83d\udc64"
>>> print('🐱👤'.encode('unicode_escape').decode('ascii'))
\U0001f431\U0001f464

JSON使用代理對來表示此類代碼點,而Python使用\\Uhhhhhhhh 8個十六進制數字轉義序列。

只是要明確一點:Unicode轉換程序站點產生的內容無濟於事,並且完全具有誤導性。 選中“ 刪除\\ u”框(不帶字節順序標記)時,“ UTF-16”框會生成JSON注釋轉義序列或UTF-16 little-endian十六進制值。 我不太了解UTF-32輸出的u+標記,UTF-8框輸出一個UTF-8-to-Latin-1 Mojibake 我不會使用該網站。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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