如何将Python 3字节字符串变量转换为常规字符串?

Dja*_*ngo 93 string type-conversion bytestring python-3.x

我已阅读XML电子邮件附件

bytes_string=part.get_payload(decode=False)
Run Code Online (Sandbox Code Playgroud)

有效负载以字节字符串形式出现,正如我的变量名所示.

我试图使用推荐的Python 3方法将此字符串转换为可以操作的可用字符串.

该示例显示:

str(b'abc','utf-8')
Run Code Online (Sandbox Code Playgroud)

如何将b(bytes)关键字参数应用于我的变量bytes_string并使用推荐的方法?

我尝试的方式不起作用:

str(bbytes_string, 'utf-8')
Run Code Online (Sandbox Code Playgroud)

Tob*_*ght 176

你在最后一行几乎是正确的.你要

str(bytes_string, 'utf-8')
Run Code Online (Sandbox Code Playgroud)

因为类型bytes_stringbytes,类型相同b'abc'.

  • str(bytes_string,'utf-8','ignore')`可以通过传递第三个参数来忽略错误。 (5认同)
  • 看起来应该是对[pylang的答案](/ a / 49457333)的评论(该地址致力于处理无效输入)。如果(您相信)“ bytes_string”没有问题,那么为什么要忽略错误? (2认同)
  • 我的方法出现以下错误:UnicodeDecodeError:'utf-8'编解码器无法解码位置0的字节0xbf:以下字节字符串'b'\ xbf \ x8cd \ xba \ x7f \ xe0的无效起始字节\ xf0 \ xb8t \ xfe.TaFJ \ xad \ x100 \ x07p \ xa0 \ x1f90 \ xb7P \ x8eP \ x90 \ x06)0'` @TobySpeight (2认同)

una*_*e01 44

调用decode()一个bytes实例来得到它编码的文本.

str = bytes.decode()
Run Code Online (Sandbox Code Playgroud)

  • UnicodeDecodeError:'utf-8'编解码器无法解码230位的字节0xf6:无效的起始字节 (4认同)
  • @JuhaUntinen你的编码可能不是utf-8. (3认同)
  • 如何从数组中过滤(跳过)非UTF8字符? (2认同)

Sey*_*yfi 6

更新:

没有任何内容b,开头和结尾都有引号

由于您的代码可能包含无法识别的字符'utf-8',因此最好只使用str而不带任何其他参数:

bad_bytes = b'\x02-\xdfI#)'
text = str( bad_bytes )[2:-1]
Run Code Online (Sandbox Code Playgroud)

如果将'utf-8'参数添加到这些特定字节,则应该收到错误。

正如PYTHON 3标准所说,text现在不用担心会出现在utf-8中。


pyl*_*ang 5

如何从数组中过滤(跳过)非UTF8字符?

要在@ uname01的帖子和OP中解决此评论,请忽略以下错误:

>>> b'\x80abc'.decode("utf-8", errors="ignore")
'abc'
Run Code Online (Sandbox Code Playgroud)

细节

docs中,以下是使用相同errors参数的更多示例:

>>> b'\x80abc'.decode("utf-8", "replace")
'\ufffdabc'
>>> b'\x80abc'.decode("utf-8", "backslashreplace")
'\\x80abc'
>>> b'\x80abc'.decode("utf-8", "strict")  
Traceback (most recent call last):
    ...
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0:
  invalid start byte
Run Code Online (Sandbox Code Playgroud)

errors参数指定当无法根据编码规则转换输入字符串时的响应。此参数的合法值为'strict'(引发UnicodeDecodeError异常),'replace'(use U+FFFDREPLACEMENT CHARACTER)或'ignore'(仅将字符保留在Unicode结果之外)。