打开文件的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无法表示的,就会有相同报错。
选择较大字符集并保持一致自然是最好。但有时因为种种限制(比如数据库已设定好字符集),无法自由更改。那么这时,就需要通过设置 errors 参数:errors='ignore' 来忽略这些字符:
s='影评©豆瓣'
s.encode('gbk',errors='ignore')
errors的默认值是 strict,只要有无法解码字符就报错;
设为 ignore 是忽略无法解码字符;
也可以设为 replace,会将无法解码字符替换为问号(?)
上面的例子是针对编码(encode),在解码(decode)时也同样适用。
在 #PY小贴士# 里,我们会分享一些 python 知识点、开发中的小技巧、容易踩到的坑,以及学员遇到并在群里提到真实问题。篇幅尽量短小,适合碎片时间阅读,欢迎关注!