将包含 unicode 数据的 bytearray 转换为 str
Convert bytearray containing unicode data to str
我需要将包含未编码原始 unicode 数据的 bytearray 转换为 unicode 字符串,例如unicode \u2167 代表罗马数字 8:
print(u'\u2167')
Ⅷ
将此信息存储在字节数组中后,我需要找到一种方法将其转换回 unicode。从例如解码'utf8' 显然不行:
b = bytearray([0x21,0x67])
print(b.decode('utf8'))
!g
有什么想法吗?
编辑
@Luke 的评论让我走上了正轨。显然原始数据(不是我在这里展示的简化数据)被编码为 UTF-16le。数据是从 wxpython TextDataObject 获得的。 wxpython 内部通常使用 unicode。这就是让我认为我正在处理 unicode 数据的原因。
行print(b.decode('utf8'))
不正确,正确的用法是:
print(b.decode("utf-8"))
... a bytearray which contains non-encoded raw unicode data
如果它在字节数组中,则根据定义进行编码。 Python bytes
或 bytearray
类型可以包含编码的 Unicode 数据。 str
类型包含 Unicode 代码点。你.decode
一个字节串转成一个Unicode串,.encode
一个Unicode串转成字节串。您的示例使用的编码是 UTF-16BE:
>>> b = bytearray([0x21,0x67])
>>> b.decode('utf-16be')
'Ⅷ'
我需要将包含未编码原始 unicode 数据的 bytearray 转换为 unicode 字符串,例如unicode \u2167 代表罗马数字 8:
print(u'\u2167')
Ⅷ
将此信息存储在字节数组中后,我需要找到一种方法将其转换回 unicode。从例如解码'utf8' 显然不行:
b = bytearray([0x21,0x67])
print(b.decode('utf8'))
!g
有什么想法吗?
编辑
@Luke 的评论让我走上了正轨。显然原始数据(不是我在这里展示的简化数据)被编码为 UTF-16le。数据是从 wxpython TextDataObject 获得的。 wxpython 内部通常使用 unicode。这就是让我认为我正在处理 unicode 数据的原因。
行print(b.decode('utf8'))
不正确,正确的用法是:
print(b.decode("utf-8"))
... a bytearray which contains non-encoded raw unicode data
如果它在字节数组中,则根据定义进行编码。 Python bytes
或 bytearray
类型可以包含编码的 Unicode 数据。 str
类型包含 Unicode 代码点。你.decode
一个字节串转成一个Unicode串,.encode
一个Unicode串转成字节串。您的示例使用的编码是 UTF-16BE:
>>> b = bytearray([0x21,0x67])
>>> b.decode('utf-16be')
'Ⅷ'