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 相关文章推荐
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
Jan 22 Python
python用字典统计单词或汉字词个数示例
Apr 22 Python
详解如何用OpenCV + Python 实现人脸识别
Oct 20 Python
Python实现检测文件MD5值的方法示例
Apr 11 Python
django 通过URL访问上传的文件方法
Jul 28 Python
关于Python中的向量相加和numpy中的向量相加效率对比
Aug 26 Python
wxPython实现带颜色的进度条
Nov 19 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
Dec 25 Python
python dataframe NaN处理方式
Dec 26 Python
基于Python测试程序是否有错误
May 16 Python
Python正则表达式高级使用方法汇总
Jun 18 Python
Python自动化爬取天眼查数据的实现
Jun 15 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
PHP 异步执行方法,模拟多线程的应用分析
2013/06/03 PHP
PHP循环结构实例讲解
2014/02/10 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
2014/03/14 PHP
php计算整个目录大小的方法
2015/06/19 PHP
PHP远程调试之XDEBUG
2015/12/29 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
PHP strcmp()和strcasecmp()的区别实例
2016/11/05 PHP
创建一个复制UBB软件信息的链接或按钮的js代码
2008/01/06 Javascript
如何阻止复制剪切和粘贴事件为了表单内容的安全
2013/05/23 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
window.location.hash知识汇总
2015/11/09 Javascript
原生JavaScript实现异步多文件上传
2015/12/02 Javascript
js严格模式总结(分享)
2016/08/22 Javascript
JS多物体实现缓冲运动效果示例
2016/12/20 Javascript
jQuery实现移动端Tab选项卡效果
2017/03/15 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
2018/05/17 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
2019/12/26 Javascript
Python中optparse模块使用浅析
2015/01/01 Python
python生成1行四列全2矩阵的方法
2018/08/04 Python
python批量从es取数据的方法(文档数超过10000)
2018/12/27 Python
Python线上环境使用日志的及配置文件
2019/07/28 Python
基于python实现学生信息管理系统
2019/11/22 Python
Python异常继承关系和自定义异常实现代码实例
2020/02/20 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
2020/03/03 Python
Python求凸包及多边形面积教程
2020/04/12 Python
基于Python脚本实现邮件报警功能
2020/05/20 Python
python定义具名元组实例操作
2021/02/28 Python
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
管理科学大学生求职信
2013/11/13 职场文书
毕业自荐书
2013/12/09 职场文书
仓库管理专业个人的自我评价
2013/12/30 职场文书
工作交流会欢迎词
2014/01/12 职场文书
音乐器材管理制度
2014/01/31 职场文书
三八妇女节趣味活动方案
2014/08/23 职场文书
2015年部门工作总结范文
2015/03/31 职场文书