我已经阅读了一个 XML 电子邮件附件
bytes_string=part.get_payload(decode=False)
正如我的变量名所示,有效负载是一个字节字符串。
我正在尝试使用推荐的 Python3方法将这个字符串转换为可操作的可用字符串。
例子显示:
str(b'abc','utf-8')
如何将 b(字节)关键字参数应用到变量 bytes_string并使用推荐的方法?
b
bytes_string
我尝试的方法行不通:
str(bbytes_string, 'utf-8')
在 bytes实例上调用 decode()以获得它所编码的文本。
bytes
decode()
str = bytes.decode()
你在最后一行几乎说对了
str(bytes_string, 'utf-8')
因为 bytes_string的类型是 bytes,与 b'abc'的类型相同。
b'abc'
更新:
没有任何 b和报价在第一和结束 如何将 bytes转换为字符串,即使在奇怪的情况下。
没有任何 b和报价在第一和结束
如何将 bytes转换为字符串,即使在奇怪的情况下。
由于您的代码可能有 无法辨认字符到 'utf-8'编码, 最好只使用 str 而不使用任何附加参数:
'utf-8'
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中,没有任何问题。
text
如何从数组中过滤(跳过)非 UTF8字符?
要解决@uname01的帖子和 OP 中的这条评论,请忽略这些错误:
密码
>>> b'\x80abc'.decode("utf-8", errors="ignore") 'abc'
细节
在 医生中,有更多使用相同 errors参数的例子:
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+FFFD、 REPLACEMENT CHARACTER)或 'ignore'(只要在 Unicode 结果中保留字符)。
'strict'
UnicodeDecodeError
'replace'
U+FFFD
REPLACEMENT CHARACTER
'ignore'