将字节转换为字符串

2022-09-05 00:41:30

我将外部程序的标准输出捕获到一个对象中:bytes

>>> from subprocess import *
>>> command_stdout = Popen(['ls', '-l'], stdout=PIPE).communicate()[0]
>>>
>>> command_stdout
b'total 0\n-rw-rw-r-- 1 thomas thomas 0 Mar  3 07:03 file1\n-rw-rw-r-- 1 thomas thomas 0 Mar  3 07:03 file2\n'

我想将其转换为普通的Python字符串,以便我可以像这样打印它:

>>> print(command_stdout)
-rw-rw-r-- 1 thomas thomas 0 Mar  3 07:03 file1
-rw-rw-r-- 1 thomas thomas 0 Mar  3 07:03 file2

我尝试了binascii.b2a_qp()方法,但再次得到了相同的对象:bytes

>>> binascii.b2a_qp(command_stdout)
b'total 0\n-rw-rw-r-- 1 thomas thomas 0 Mar  3 07:03 file1\n-rw-rw-r-- 1 thomas thomas 0 Mar  3 07:03 file2\n'

如何将对象转换为带有Python 3的a?bytesstr


答案 1

解码字节对象以生成字符串:

>>> b"abcde".decode("utf-8") 
'abcde'

上面的示例假定对象采用 UTF-8 格式,因为它是一种常见的编码。但是,您应该使用数据实际所在的编码!bytes


答案 2

解码字节字符串并将其转换为字符 (Unicode) 字符串。


Python 3:

encoding = 'utf-8'
b'hello'.decode(encoding)

str(b'hello', encoding)

Python 2:

encoding = 'utf-8'
'hello'.decode(encoding)

unicode('hello', encoding)