将包含 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 bytesbytearray 类型可以包含编码的 Unicode 数据。 str 类型包含 Unicode 代码点。你.decode一个字节串转成一个Unicode串,.encode一个Unicode串转成字节串。您的示例使用的编码是 UTF-16BE:

>>> b = bytearray([0x21,0x67])
>>> b.decode('utf-16be')
'Ⅷ'