gpt4 book ai didi

python - Python 3 中的 UTF-16 编码和日语

转载 作者:太空宇宙 更新时间:2023-11-04 00:17:36 33 4
gpt4 key购买 nike

我正在尝试将日语字符编码为 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,我正在使用带有 Python 3.6.3rc1+ 的 Jupyter Notebook。

最佳答案

您的预期输出不是 UTF-16。 UTF-16 是一个 encoding that uses 2 bytes per codepoint ; , Unicode codepoint U+30A4 KATAKANA LETTER I ,当以 UTF-16 字节表示为 A4 30 或 30 A4 十六进制时,取决于 byte order the encoder picked .

相反,您的预期输出包含嵌入在 \u 转义符中的 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 编解码器;这也输出一个字节序列;出于打印目的,我使用 ASCII 编解码器再次将这些字节解码为文本

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

您需要绝对确定您的数据的用途。当涉及到 Basic Multi-lingual Plane 之外的代码点时,JSON 和 Python 字符串文字表示法不同,例如大多数 Emoji:

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

JSON 使用 surrogate pairs来表示这样的代码点,而 Python 使用 \Uhhhhhhhh 8 位十六进制数字转义序列。

明确地说:unicode-converter 站点生成的内容没有帮助,而且完全是误导。当您选中 Remove\u 框时,“UTF-16”框会生成 JSON 符号转义序列或 UTF-16 小端十六进制值,没有字节顺序标记。 UTF-32 输出的 u+ 标记应该做什么我不太明白,UTF-8 框输出 UTF-8-to-Latin-1 Mojibake .我不会使用那个网站。

关于python - Python 3 中的 UTF-16 编码和日语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50354826/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com