首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >#PY小贴士# 文本编解码时的errors参数

#PY小贴士# 文本编解码时的errors参数

作者头像
Crossin先生
发布2019-12-18 15:26:42
7560
发布2019-12-18 15:26:42
举报

打开文件的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 知识点、开发中的小技巧、容易踩到的坑,以及学员遇到并在群里提到真实问题。篇幅尽量短小,适合碎片时间阅读,欢迎关注!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Crossin的编程教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档