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中的socket模块使用代理实例
May 29 Python
Python实现监控程序执行时间并将其写入日志的方法
Jun 30 Python
Python连接SQLServer2000的方法详解
Apr 19 Python
numpy找出array中的最大值,最小值实例
Apr 03 Python
详解python3中zipfile模块用法
Jun 18 Python
CentOS 7 安装python3.7.1的方法及注意事项
Nov 01 Python
python远程调用rpc模块xmlrpclib的方法
Jan 11 Python
使用Python实现企业微信的自动打卡功能
Apr 30 Python
pandas读取CSV文件时查看修改各列的数据类型格式
Jul 07 Python
Python 70行代码实现简单算式计算器解析
Aug 30 Python
django执行原始查询sql,并返回Dict字典例子
Apr 01 Python
Opencv求取连通区域重心实例
Jun 04 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
全国FM电台频率大全 - 18 湖南省
2020/03/11 无线电
中国的第一台收音机
2021/03/01 无线电
php数组中删除元素的实现代码
2012/06/22 PHP
thinkPHP实现表单自动验证
2014/12/24 PHP
PHP精确到毫秒秒杀倒计时实例详解
2019/03/14 PHP
PHP中isset、empty的用法与区别示例详解
2020/11/05 PHP
js 日期转换成中文格式的函数
2009/07/07 Javascript
js给onclick事件赋值,动态传参数实例解说
2013/03/28 Javascript
枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
2013/09/10 Javascript
jquery图形密码实现方法
2015/03/11 Javascript
javascript中indexOf技术详解
2015/05/07 Javascript
jQuery结合CSS制作动态的下拉菜单
2015/10/27 Javascript
理解javascript中try...catch...finally
2015/12/25 Javascript
延时加载JavaScript代码提高速度
2015/12/27 Javascript
Node.js包管理器Yarn的入门介绍与安装
2016/10/17 Javascript
使用Node.js给图片加水印的方法
2016/11/15 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
jquery实现一个全局计时器(商城可用)
2017/06/30 jQuery
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
vue实现重置表单信息为空的方法
2018/09/29 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
2019/05/22 Javascript
使用jquery-easyui的布局layout写后台管理页面的代码详解
2019/06/19 jQuery
python二分法实现实例
2013/11/21 Python
简单理解Python中的装饰器
2015/07/31 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
2020/07/28 Python
python3跳出一个循环的实例操作
2020/08/18 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
2020/12/07 Python
房地产还款计划书
2014/01/10 职场文书
财务会计实训报告
2014/11/05 职场文书
2014年幼儿园德育工作总结
2014/12/17 职场文书
公司仓管员岗位职责
2015/04/01 职场文书
生日寿星公答谢词
2015/09/29 职场文书
利用python做数据拟合详情
2021/11/17 Python