Answers:
您在最后一行中几乎正确了。你要
str(bytes_string, 'utf-8')
因为类型bytes_string
就是bytes
,相同的类型b'abc'
。
bytes_string
,那么为什么要忽略错误?
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbf in position 0: invalid start byte
适用以下字节串b'\xbf\x8cd\xba\x7f\xe0\xf0\xb8t\xfe.TaFJ\xad\x100\x07p\xa0\x1f90\xb7P\x8eP\x90\x06)0'
@TobySpeight
调用decode()
一个bytes
实例来得到它编码的文本。
str = bytes.decode()
更新:
没有任何内容,
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中。
b
如何从数组中过滤(跳过)非UTF8字符?
要在@ uname01的帖子和OP中解决此评论,请忽略以下错误:
码
>>> b'\x80abc'.decode("utf-8", errors="ignore")
'abc'
细节
在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
errors参数指定无法根据编码规则转换输入字符串时的响应。此参数的合法值为
'strict'
(引发UnicodeDecodeError
异常),'replace'
(useU+FFFD
,REPLACEMENT CHARACTER
)或'ignore'
(仅将字符保留在Unicode结果之外)。
str(bytes_string, 'utf-8', 'ignore')
通过传递第三个参数可以忽略错误。