如何在Python3中将"二进制字符串"转换为普通字符串?

Han*_*Sun 208 python string binary python-3.x

例如,我有一个像这样的字符串(返回值subprocess.check_output):

>>> b'a string'
b'a string'
Run Code Online (Sandbox Code Playgroud)

无论我做了什么,它总是印b'在字符串之前的烦人:

>>> print(b'a string')
b'a string'
>>> print(str(b'a string'))
b'a string'
Run Code Online (Sandbox Code Playgroud)

有没有人有任何关于如何将其用作普通字符串或将其转换为普通字符串的想法?

fal*_*tru 295

解码它.

>>> b'a string'.decode('ascii')
'a string'
Run Code Online (Sandbox Code Playgroud)

要从字符串中获取字节,请对其进行编码

>>> 'a string'.encode('ascii')
b'a string'
Run Code Online (Sandbox Code Playgroud)

  • @lyomi,我使用`ascii`,因为给定的字符串是用ascii字母制作的.如果编码是`utf-8`,则不需要指定编码(根据`str.encode`,`bytes.decode` doc-string,在Python 3.x中默认) (20认同)
  • @lyomi 2016年(及其即将结束)人们仍然使用ascii.有许多"遗留"产品和系统(包括规范),但是也有很多原因可能会导致您创建一个"二进制字符串",在这种情况下您不希望使用unicode或某些东西尝试将多个字节"合并"到单个字符.我们经常使用"字符串"来包含二进制数据,例如发出DNS请求等. (2认同)
  • @aturegano,这不是唯一的选择。sys.getfilesystemencoding(),sys.stdin.encoding,sys.stdout.encoding 恕我直言,使用那些自动编码检测可以解决问题,因为可以以其他方式编写子程序(OP使用子进程)来确定编码(甚至是硬编码)。无论如何,感谢您的反馈。 (2认同)

kam*_*ame 63

如果来自falsetru的答案不起作用,您还可以尝试:

>>> b'a string'.decode('utf-8')
'a string'
Run Code Online (Sandbox Code Playgroud)


Dan*_*les 11

请参阅图书馆的官方encode()和文档。是函数的默认编码,但Python 3 中有几种标准编码,例如或。decode()codecsutf-8latin_1utf_32