我正在尝试将日语字符编码为UTF-16;基本上模仿这个在线工具的功能:https://www.branah.com/unicode-converter
例如
'インスタントグラム'
应该成为
'u30a4u30f3u30b9u30bfu30f3u30c8u30b0u30e9u30e0'
我正在使用以下代码块:
jp_example = 'インスタントグラム'
jp_example.encode('utf-16')
而是接收如下所示的输出:
b'xffxfexa40xf30xb90xbf0xf30xc80xb00xe90xe00'
知道我错过了什么吗?我玩过其他编码,但对我没有任何用处。
FWIW,我正在使用带有Python 3.6.3rc1+的Jupyter Notebook。
您的预期输出不是 UTF-16。UTF-16 是一种编码,每个代码点使用 2 个字节;イ
,Unicode 代码点 U+30A4 片假名字母 I,当用 UTF-16 字节表示为 A4 30 或 30 A4 十六进制时,具体取决于编码器选择的字节顺序。
相反,预期的输出由嵌入在u
转义中的 Unicode 代码点组成。此类转义用于多个上下文,包括 Python 字符串文本和 JSON 数据。
如果要生成 JSON 数据,请使用json.dumps()
创建 JSON 字符串;该字符串中 ASCII 字符集之外的任何代码点都用uhhhh
转义序列表示:
>>> jp_example = 'インスタントグラム'
>>> import json
>>> print(json.dumps(jp_example))
"u30a4u30f3u30b9u30bfu30f3u30c8u30b0u30e9u30e0"
否则,如果要生成 Python 字符串文字,请使用unicode_escape
编解码器;这也输出一个字节序列;出于打印目的,我使用 ASCII 编解码器将这些字节再次解码为文本。
>>> print(jp_example.encode('unicode_escape').decode('ascii'))
u30a4u30f3u30b9u30bfu30f3u30c8u30b0u30e9u30e0
您需要绝对确定数据的用途。JSON 和 Python 字符串文字表示法在涉及基本多语言平面之外的代码点时有所不同,例如大多数表情符号:
>>> print(json.dumps('🐱👤'))
"ud83dudc31ud83dudc64"
>>> print('🐱👤'.encode('unicode_escape').decode('ascii'))
U0001f431U0001f464
JSON 使用代理项对来表示此类代码点,而 Python 使用Uhhhhhhhh
8 位十六进制转义序列。
明确地说:Unicode转换器网站产生的东西没有帮助,而且完全具有误导性。当您选中">删除\u"框时,"UTF-16"框会生成 JSON 表示法转义序列或 UTF-16 小端十六进制值,不带字节顺序标记。UTF-32 输出的u+
标记应该做什么我不太明白,UTF-8 框输出 UTF-8 到拉丁语 1 Mojibake。我不会使用那个网站。