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命令行参数解析模块getopt使用实例
Apr 13 Python
在Python中用keys()方法返回字典键的教程
May 21 Python
剖析Python的Tornado框架中session支持的实现代码
Aug 21 Python
浅析AST抽象语法树及Python代码实现
Jun 06 Python
Python json 错误xx is not JSON serializable解决办法
Mar 15 Python
flask + pymysql操作Mysql数据库的实例
Nov 13 Python
numpy.linspace 生成等差数组的方法
Jul 02 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
Oct 11 Python
python进程间通信Queue工作过程详解
Nov 01 Python
python实现交并比IOU教程
Apr 16 Python
python实现126邮箱发送邮件
May 20 Python
Python 恐龙跑跑小游戏实现流程
Feb 15 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
thinkphp使用phpmailer发送邮件的方法
2014/11/24 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
PHP互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
jquery.validate使用攻略 第二部
2010/07/01 Javascript
Jquery选中或取消radio示例
2013/09/29 Javascript
javascript抖动元素的小例子
2013/10/28 Javascript
js函数内变量的作用域分析
2015/01/12 Javascript
javascript事件模型实例分析
2015/01/30 Javascript
window.open()实现post传递参数
2015/03/12 Javascript
原生 JS Ajax,GET和POST 请求实例代码
2016/06/08 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
2016/07/25 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
jQ处理xml文件和xml字符串的方法(详解)
2016/11/22 Javascript
ThinkJS中如何使用MongoDB的CURD操作
2016/12/13 Javascript
原生js实现弹出层效果
2017/01/20 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
实例详解BootStrap的动态模态框及静态模态框
2018/08/13 Javascript
详解小程序缓存插件(mrc)
2018/08/17 Javascript
微信小程序使用wxParse解析html的实现示例
2018/08/30 Javascript
jquery实现异步文件上传ajaxfileupload.js
2020/10/23 jQuery
python 字符串和整数的转换方法
2018/06/25 Python
python3实现爬取淘宝美食代码分享
2018/09/23 Python
python 自定义异常和异常捕捉的方法
2018/10/18 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
python集合删除多种方法详解
2020/02/10 Python
解决Python import docx出错DLL load failed的问题
2020/02/13 Python
Python实现从N个数中找到最大的K个数
2020/04/02 Python
解析html5 canvas实现背景鼠标连线动态效果代码
2019/06/17 HTML / CSS
家得宝加拿大家装网上商店:The Home Depot加拿大
2016/08/27 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
关于军训的感想
2015/08/07 职场文书
初任公务员培训心得体会
2016/01/08 职场文书
微信小程序APP页面的之间的相互传递参数以及自定义组件
2022/04/19 Javascript
JS前端监控采集用户行为的N种姿势
2022/07/23 Javascript