在Python中安全解码(使用'?'符号代替异常)

4 投票
2 回答
10658 浏览
提问于 2025-04-16 13:11

我有一段代码:

encoding = guess_encoding()    
text = unicode(text, encoding)

当文本中出现错误的符号时,会引发一个Unicode解码异常。请问我该如何在不报错的情况下,默默地跳过这个异常,把错误的符号替换成'?'呢?

2 个回答

3

在Python 3中,你可以用decode方法把bytes对象转换成字符串。这个方法有两个参数:

  • encoding,默认是"utf-8"
  • errors,这个参数用来定义遇到非法字符时该怎么处理。默认值是"strict",这会抛出一个UnicodeDecodeError错误;其他的选项有ignorereplace,后者会把非法字符替换成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之后。

撰写回答