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 相关文章推荐
tensorflow TFRecords文件的生成和读取的方法
Feb 06 Python
Python 给某个文件名添加时间戳的方法
Oct 16 Python
python爬取淘宝商品销量信息
Nov 16 Python
详解python做UI界面的方法
Feb 27 Python
使用TensorFlow实现简单线性回归模型
Jul 19 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
Nov 26 Python
python+selenium 脚本实现每天自动登记的思路详解
Mar 11 Python
python 多线程共享全局变量的优劣
Sep 24 Python
Python random模块的使用示例
Oct 10 Python
Python 中数组和数字相乘时的注意事项说明
May 10 Python
Python答题卡识别并给出分数的实现代码
Jun 22 Python
Python实现抖音热搜定时爬取功能
Mar 16 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
ASP和PHP都是可以删除自身的
2007/04/09 PHP
PHP动态创建Web站点的方法
2011/08/14 PHP
修改php.ini不生效问题解决方法(上传大于8M的文件)
2013/06/14 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
2013/06/18 PHP
利用php_imagick实现复古效果的方法
2016/10/18 PHP
容易被忽略的JS脚本特性
2011/09/13 Javascript
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
2011/09/19 Javascript
DWZ table的原生分页浅谈
2013/03/01 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
深入理解JavaScript系列(33):设计模式之策略模式详解
2015/03/03 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
利用fecha进行JS日期处理
2016/11/21 Javascript
关于Bootstrap按钮组件消除黄框的方法
2017/05/19 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
2018/04/03 Javascript
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
深入浅析javascript函数中with
2018/10/28 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
2019/07/07 Javascript
vue项目实现图片上传功能
2019/12/23 Javascript
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
2016/10/12 Python
解决Python的str强转int时遇到的问题
2018/04/09 Python
python使用turtle绘制分形树
2018/06/22 Python
python求最大连续子数组的和
2018/07/07 Python
Python爬虫运用正则表达式的方法和优缺点
2019/08/25 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
Python csv文件记录流程代码解析
2020/07/16 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
师范大学应届生求职信
2013/11/21 职场文书
演讲稿开场白
2014/01/13 职场文书
应届本科毕业生求职信
2014/07/23 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
干部四风问题整改措施思想汇报
2014/10/13 职场文书
2014年个人委托书范本
2014/10/13 职场文书