文本编解码时的 errors 参数

打开文件的 open 方法和对字符编码解码的 encode/decode,它们都有一个同样的可选参数 errors。这个参数很有用处。
比如我们从网上获取的一段文本,然后想保存到文件中。有时候会莫名出现类似的报错:

UnicodeEncodeError: 'gbk' codec can't encode character '\xa9' in position 2: illegal multibyte sequence

当 position 不是 0 或者 -1,而是一个比较大的数字时,基本都是因为文字中有超出所用编码范围的字符而导致。比如以下的例子:

s='影评©豆瓣'
s.encode('gbk')

类似的,当你从 UTF8 的网页获取了内容,又以 windows 默认的 GBK 保存文件,若其中存在一些字符是 GBK 无法表示的,就会有相同报错。

`s='影评©豆瓣'
s.encode('gbk',errors='ignore')

errors 的默认值是 strict,只要有无法解码字符就报错;
设为 **ignore ** 是忽略无法解码字符;
也可以设为 replace,会将无法解码字符替换为问号 (?)

上面的例子是针对编码(encode),在解码(decode)时也同样适用。