Python转码问题的解决方法


Posted in Python onOctober 07, 2008

比如,若要将某个String对象s从gbk内码转换为UTF-8,可以如下操作
s.decode('gbk').encode('utf-8′)
可是,在实际开发中,我发现,这种办法经常会出现异常:
UnicodeDecodeError: ‘gbk' codec can't decode bytes in position 30664-30665: illegal multibyte sequence
这 是因为遇到了非法字符——尤其是在某些用C/C++编写的程序中,全角空格往往有多种不同的实现方式,比如\xa3\xa0,或者\xa4\x57,这些 字符,看起来都是全角空格,但它们并不是“合法”的全角空格(真正的全角空格是\xa1\xa1),因此在转码的过程中出现了异常。
这样的问题很让人头疼,因为只要字符串中出现了一个非法字符,整个字符串——有时候,就是整篇文章——就都无法转码。

解决办法:
s.decode('gbk', ‘ignore').encode('utf-8′)
因为decode的函数原型是decode([encoding], [errors='strict']),可以用第二个参数控制错误处理的策略,默认的参数就是strict,代表遇到非法字符时抛出异常;
如果设置为ignore,则会忽略非法字符;
如果设置为replace,则会用?取代非法字符;
如果设置为xmlcharrefreplace,则使用XML的字符引用。

python文档

decode( [encoding[, errors]])
Decodes the string using the codec registered for encoding. encoding defaults to the default string encoding. errors may be given to set a different error handling scheme. The default is 'strict', meaning that encoding errors raise UnicodeError. Other possible values are 'ignore', 'replace' and any other name registered via codecs.register_error, see section 4.8.1.

Python 相关文章推荐
python使用正则表达式检测密码强度源码分享
Jun 11 Python
Python使用django获取用户IP地址的方法
May 11 Python
Python调用C++程序的方法详解
Jan 24 Python
使用XML库的方式,实现RPC通信的方法(推荐)
Jun 14 Python
Python实现的矩阵类实例
Aug 22 Python
python pandas库中DataFrame对行和列的操作实例讲解
Jun 09 Python
python爬虫自动创建文件夹的功能
Aug 01 Python
python TF-IDF算法实现文本关键词提取
May 29 Python
python查看文件大小和文件夹内容的方法
Jul 08 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
Jul 13 Python
Python numpy大矩阵运算内存不足如何解决
Nov 19 Python
python 利用PyAutoGUI快速构建自动化操作脚本
May 31 Python
Python函数学习笔记
Oct 07 #Python
Python日期操作学习笔记
Oct 07 #Python
wxPython 入门教程
Oct 07 #Python
新手该如何学python怎么学好python?
Oct 07 #Python
Python 调用VC++的动态链接库(DLL)
Sep 06 #Python
Python urlopen 使用小示例
Sep 06 #Python
Python 网络编程起步(Socket发送消息)
Sep 06 #Python
You might like
ThinkPHP写数组插入与获取最新插入数据ID实例
2014/11/03 PHP
Yii2使用dropdownlist实现地区三级联动功能的方法
2016/07/18 PHP
php实现连接access数据库并转txt写入的方法
2017/02/08 PHP
js操纵跨frame的三级联动select下拉选项实例介绍
2013/05/19 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
2014/03/12 Javascript
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
2014/03/22 Javascript
PHP PDO操作总结
2014/11/17 Javascript
jquery中push()的用法(数组添加元素)
2014/11/25 Javascript
javascript 中的console.log和弹出窗口alert
2016/08/30 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
JS仿QQ好友列表展开、收缩功能(第二篇)
2017/07/07 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
ElementUI之Message功能拓展详解
2019/10/18 Javascript
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
vue.js实现双击放大预览功能
2020/06/23 Javascript
javascript局部自定义鼠标右键菜单
2020/12/08 Javascript
[05:13]2018DOTA2亚洲邀请赛主赛事第二日战况回顾 LGD、VG双雄携手晋级
2018/04/05 DOTA
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
使用Python Pandas处理亿级数据的方法
2019/06/24 Python
Python模拟登录之滑块验证码的破解(实例代码)
2019/11/18 Python
pytorch标签转onehot形式实例
2020/01/02 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
比利时买床:Beter Bed
2017/12/06 全球购物
波兰最大的儿童服装连锁店之一:5.10.15.
2018/02/11 全球购物
世界领先的26岁以下学生和青少年旅行预订网站:StudentUniverse
2018/07/01 全球购物
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
linux面试题参考答案(11)
2012/05/01 面试题
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
服务员岗位职责
2015/02/03 职场文书
电影小兵张嘎观后感
2015/06/03 职场文书
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL