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方法将此字符串转换为可以操作的可用字符串.
该示例显示:
Run Code Online (Sandbox Code Playgroud)str(b'abc','utf-8')
如何将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_string是bytes,类型相同b'abc'.
una*_*e01 44
调用decode()一个bytes实例来得到它编码的文本.
str = bytes.decode()
Run Code Online (Sandbox Code Playgroud)
更新:
没有任何内容
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中。
如何从数组中过滤(跳过)非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'(useU+FFFD,REPLACEMENT CHARACTER)或'ignore'(仅将字符保留在Unicode结果之外)。