在Python中安全解码(使用'?'符号代替异常)
我有一段代码:
encoding = guess_encoding()
text = unicode(text, encoding)
当文本中出现错误的符号时,会引发一个Unicode解码异常。请问我该如何在不报错的情况下,默默地跳过这个异常,把错误的符号替换成'?'呢?
2 个回答
3
在Python 3中,你可以用decode
方法把bytes
对象转换成字符串。这个方法有两个参数:
encoding
,默认是"utf-8"
,errors
,这个参数用来定义遇到非法字符时该怎么处理。默认值是"strict"
,这会抛出一个UnicodeDecodeError
错误;其他的选项有ignore
和replace
,后者会把非法字符替换成Unicode替代字符"\uFFFD"
。
所以,如果你想要解码并替换非法字符,可以这样做:
encoding = guess_encoding()
text = text_bytes.decode(encoding, errors='replace').replace('\uFFFD', '?')
正如Sven Marnach在评论中提到的,你可以直接把errors
参数传给open
函数;否则在读取文件时,如果遇到不在字符映射中的字符,就会出现解码错误。
12
试试这个
text = unicode(text, encoding, "replace")
来自文档:
'replace'会使用官方的Unicode替换字符U+FFFD,来替换那些无法解码的输入字符。
如果你想用"?"
来代替这个官方的Unicode替换字符,可以这样做:
text = text.replace(u"\uFFFD", "?")
在转换为unicode之后。