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中pass语句用法实例分析
Apr 30 Python
Python Matplotlib库入门指南
May 18 Python
浅析Python中将单词首字母大写的capitalize()方法
May 18 Python
python使用MySQLdb访问mysql数据库的方法
Aug 03 Python
在Python中使用正则表达式的方法
Aug 13 Python
Python制作钉钉加密/解密工具
Dec 07 Python
Python实现基于二叉树存储结构的堆排序算法示例
Dec 08 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
Jan 10 Python
python获取url的返回信息方法
Dec 17 Python
Python 中包/模块的 `import` 操作代码
Apr 22 Python
python wxpython 实现界面跳转功能
Dec 17 Python
Python基于数列实现购物车程序过程详解
Jun 09 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下连接ftp实现文件的上传、下载、删除文件实例代码
2010/06/03 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
JavaScript 语言的递归编程
2010/05/18 Javascript
20款效果非常棒的 jQuery 插件小结分享
2011/11/18 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/20 Javascript
javascript进行数组追加方法小结
2014/06/16 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
2015/01/13 Javascript
JavaScript分秒倒计时器实现方法
2015/02/02 Javascript
JS数字抽奖游戏实现方法
2015/05/04 Javascript
浅析javascript的return语句
2015/12/15 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
实现隔行换色效果的两种方式【实用】
2016/11/27 Javascript
js仿微信语音播放实现思路
2016/12/12 Javascript
jQuery Pagination分页插件使用方法详解
2017/02/28 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
Node.js+Express+MySql实现用户登录注册功能
2017/07/10 Javascript
利用js给datalist或select动态添加option选项的方法
2018/01/25 Javascript
原生JS实现的简单轮播图功能【适合新手】
2018/08/17 Javascript
实例详解vue中的$root和$parent
2019/04/29 Javascript
mpvue微信小程序开发之实现一个弹幕评论
2019/11/24 Javascript
Json实现传值到后台代码实例
2020/06/30 Javascript
Python实现文件内容批量追加的方法示例
2017/08/29 Python
Python爬虫获取整个站点中的所有外部链接代码示例
2017/12/26 Python
python3学习笔记之多进程分布式小例子
2018/02/13 Python
Python中将两个或多个list合成一个list的方法小结
2019/05/12 Python
pytorch 可视化feature map的示例代码
2019/08/20 Python
Python实现Restful API的例子
2019/08/31 Python
使用python实现数组、链表、队列、栈的方法
2019/12/20 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
利用Python将多张图片合成视频的实现
2020/11/23 Python
Yahoo-PHP面试题3
2012/01/14 面试题
修理厂厂长岗位职责
2014/01/30 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
2016消防宣传标语口号
2015/12/26 职场文书
tp5使用layui实现多个图片上传(带附件选择)的方法实例
2021/11/17 PHP