如何在Python中将包含非ASCII字节的字节数组转换为字符串?

7
我不知道如何将Python的bitarray转换为字符串,如果它包含非ASCII字节。例如:
>>> string='\x9f'
>>> array=bytearray(string)
>>> array
bytearray(b'\x9f')
>>> array.decode()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0x9f in position 0: ordinal not in range(128)

在我的例子中,我只想从bytearray中以某种方式获取字符串'\x9f'。这是否可能?


这是Python 2还是3? - Martijn Pieters
Python 2. 我会将它添加到问题中。 - Karel Bílek
4个回答

13

在Python 2中,只需将其传递给str()

>>> import sys; sys.version_info
sys.version_info(major=2, minor=7, micro=8, releaselevel='final', serial=0)
>>> string='\x9f'
>>> array=bytearray(string)
>>> array
bytearray(b'\x9f')
>>> str(array)
'\x9f'
在Python 3中,您需要将其转换回bytes对象:
>>> bytes(array)
b'\x9f'

1
哦,原来如此简单。(我在Python方面还是新手!) - Karel Bílek

8

你试过了吗?

byteVariable.decode('utf-8')

5
我想提一下 Python 自带的 binascii 库。
我的使用场景是:我查询了一个数据库,其中有一个二进制字段被用作 DB 中的键。我想将该二进制字段提取出来,并在其他地方将其视为键。我认为将它转换为字符串是最好的用例。
但是,binascii 为我提供了更好的选择: import binascii binary_field = bytearray(b'\x92...') binascii.hexlify(binary_field)

binascii 模块非常有用。 - Land

0

使用bytes(array, encoding='utf8')


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接