无法在 python 3 中解码字节数组,但在 python 2 中可以解码

Unable to decode bytearray in python 3 but possible in python 2

我正在尝试将 bytearray 打印为一串 ascii 字符 Python3.

我有一个 bytearray,我尝试使用 Python 2 和 Python 3 打印它。在 Python 2 中打印了 bytearray以适当的 ascii 字符发送到控制台。但是,当我在 Python 3 中尝试时,出现如下错误:

Python2:

print(bytearray(b"\x0e6G\xe8Y-5QJ\x08\x12CX%6\xed=\xe6s@Y\x00\x1e?S\\xe6\'\x102"))

# 6G?Y-5QCX%6?=?s@Y?S\?'2

Python3:

print(bytearray(b"\x0e6G\xe8Y-5QJ\x08\x12CX%6\xed=\xe6s@Y\x00\x1e?S\\xe6\'\x102").decode("ascii"))

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 3: ordinal not in range(128)

如何在 Python 3 中实现与 Python 2 中相同的行为? Python 2 中的 print 除了简单地将字节数组解码为 ascii 之外,是否还做了其他事情?

ascii 是 7 位。使用 iso-8859-15 或类似的 8 位。您选择哪种 8 位编解码器将取决于您首选的高位字符映射。

>>> print(bytearray(b"\x0e6G\xe8Y-5QJ\x08\x12CX%6\xed=\xe6s@Y\x00\x1e?S\\xe6\'\x102").decode("iso-8859-15"))
6GèY-5QCX%6í=æs@Y?S\æ'2
>>> print(bytearray(b"\x0e6G\xe8Y-5QJ\x08\x12CX%6\xed=\xe6s@Y\x00\x1e?S\\xe6\'\x102").decode("iso-8859-15").encode("iso-8859-15") == bytearray(b"\x0e6G\xe8Y-5QJ\x08\x12CX%6\xed=\xe6s@Y\x00\x1e?S\\xe6\'\x102"))
True