Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法


Posted in Python onApril 24, 2015

使用Python写文件的时候,或者将网络数据流写入到本地文件的时候,大部分情况下会遇到:UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position ... 这个问题。 网络上有很多类似的文件讲述如何解决这个问题,但是无非就是encode,decode相关的,这是导致该问题出现的真正原因吗?不是的。 很多时候,我们使用了decode和encode,试遍了各种编码,utf8,utf-8,gbk,gb2312等等,该有的编码都试遍了,可是编译的时候仍然出现: UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position XXX。 崩溃了。

    在windows下面编写python脚本,编码问题很严重。

    将网络数据流写入文件时时,我们会遇到几个编码:

    1: #encoding='XXX' 这里(也就是python文件第一行的内容)的编码是指该python脚本文件本身的编码,无关紧要。只要XXX和文件本身的编码相同就行了。 比如notepad++ "格式"菜单里面里可以设置各种编码,这时需要保证该菜单里设置的编码和encoding XXX相同就行了,不同的话会报错

    2:网络数据流的编码 比如获取网页,那么网络数据流的编码就是网页的编码。需要使用decode解码成unicode编码。

    3:目标文件的编码 要将网络数据流的编码写入到新文件,那么我么需要指定新文件的编码。写文件代码如:

f.write(txt) 

,那么txt是一个字符串,它是通过decode解码过的字符串。关键点就要来了:目标文件的编码是导致标题所指问题的罪魁祸首。如果我们打开一个文件:
f = open("out.html","w") 

,在windows下面,新文件的默认编码是gbk,这样的话,python解释器会用gbk编码去解析我们的网络数据流txt,然而txt此时已经是decode过的unicode编码,这样的话就会导致解析不了,出现上述问题。 解决的办法就是,改变目标文件的编码:
f = open("out.html","w",encoding='utf-8') 

。这样,问题将不复存在。
Python 相关文章推荐
python的三目运算符和not in运算符使用示例
Mar 03 Python
Python中基础的socket编程实战攻略
Jun 01 Python
关于Python面向对象编程的知识点总结
Feb 14 Python
Python下载网络小说实例代码
Feb 03 Python
Python查找第n个子串的技巧分享
Jun 27 Python
Python3 jupyter notebook 服务器搭建过程
Nov 30 Python
Python根据欧拉角求旋转矩阵的实例
Jan 28 Python
Python 3.6 -win64环境安装PIL模块的教程
Jun 20 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
Jun 24 Python
Python绘图Matplotlib之坐标轴及刻度总结
Jun 28 Python
python爬虫 正则表达式解析
Sep 28 Python
python字典key不能是可以是啥类型
Aug 04 Python
Python3.x中自定义比较函数
Apr 24 #Python
使用Python脚本将绝对url替换为相对url的教程
Apr 24 #Python
Python3.x版本中新的字符串格式化方法
Apr 24 #Python
用Python的Tornado框架结合memcached页面改善博客性能
Apr 24 #Python
使用Python编写一个在Linux下实现截图分享的脚本的教程
Apr 24 #Python
修改Python的pyxmpp2中的主循环使其提高性能
Apr 24 #Python
Python的Tornado框架异步编程入门实例
Apr 24 #Python
You might like
简单的php中文转拼音的实现代码
2014/02/11 PHP
php安装swoole扩展的方法
2015/03/19 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
php中get_object_vars()在数组的实例用法
2021/02/22 PHP
js取float型小数点后两位数的方法
2014/01/18 Javascript
AngularJS实现表单验证
2015/01/28 Javascript
jQuery实现购物车数字加减效果
2015/03/14 Javascript
jQuery on()方法示例及jquery on()方法的优点
2015/08/27 Javascript
JS实现漂亮的淡蓝色滑动门效果代码
2015/09/23 Javascript
JS实现slide文字框缩放伸展效果代码
2015/11/05 Javascript
基于javascript实现listbox左右移动
2016/01/29 Javascript
angularjs 表单密码验证自定义指令实现代码
2016/10/27 Javascript
Vue.js双向绑定实现原理详解
2016/12/22 Javascript
详解Webpack+Babel+React开发环境的搭建的方法步骤
2018/01/09 Javascript
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
2018/05/13 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
javascript实现简单搜索功能
2020/03/26 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
Python编写打字训练小程序
2019/09/26 Python
Python第三方库的几种安装方式(小结)
2020/04/03 Python
解决更改AUTH_USER_MODEL后出现的问题
2020/05/14 Python
Python使用正则表达式实现爬虫数据抽取
2020/08/17 Python
德国最大的设计师鞋网上商店:Budapester
2017/12/07 全球购物
override和overload的区别
2016/03/09 面试题
主要的Ajax框架都有什么
2013/11/14 面试题
腾讯公司的一个sql题
2013/01/22 面试题
教师党员个人整改措施材料
2014/09/16 职场文书
房屋登记授权委托书范本
2014/10/09 职场文书
初中中等生评语
2014/12/29 职场文书
培训师岗位职责
2015/02/14 职场文书
银行实习推荐信
2015/03/27 职场文书
MySQL之高可用集群部署及故障切换实现
2021/04/22 MySQL