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

我已经阅读了一个 XML 电子邮件附件

bytes_string=part.get_payload(decode=False)

正如我的变量名所示,有效负载是一个字节字符串。

我正在尝试使用推荐的 Python3方法将这个字符串转换为可操作的可用字符串。

例子显示:

str(b'abc','utf-8')

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

我尝试的方法行不通:

str(bbytes_string, 'utf-8')
344938 次浏览

bytes实例上调用 decode()以获得它所编码的文本。

str = bytes.decode()

你在最后一行几乎说对了

str(bytes_string, 'utf-8')

因为 bytes_string的类型是 bytes,与 b'abc'的类型相同。

更新:

没有任何 b和报价在第一和结束

如何将 bytes转换为字符串,即使在奇怪的情况下。

由于您的代码可能有 无法辨认字符到 'utf-8'编码, 最好只使用 str 而不使用任何附加参数:

some_bad_bytes = b'\x02-\xdfI#)'
text = str( some_bad_bytes )[2:-1]


print(text)
Output: \x02-\xdfI

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

正如 PYTHON 3标准所说,text现在将在 utf-8中,没有任何问题。

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

要解决@uname01的帖子和 OP 中的这条评论,请忽略这些错误:

密码

>>> b'\x80abc'.decode("utf-8", errors="ignore")
'abc'

细节

医生中,有更多使用相同 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

Error 参数指定当输入字符串无法根据编码规则转换时的响应。此参数的合法值是 'strict'(引发 UnicodeDecodeError异常)、 'replace'(使用 U+FFFDREPLACEMENT CHARACTER)或 'ignore'(只要在 Unicode 结果中保留字符)。