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之客户端和服务端握手详解
Sep 18 Python
Python编写Windows Service服务程序
Jan 04 Python
PyQt5每天必学之事件与信号
Apr 20 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
May 28 Python
python skimage 连通性区域检测方法
Jun 21 Python
对python for 文件指定行读写操作详解
Dec 29 Python
python 根据字典的键值进行排序的方法
Jul 24 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
Aug 07 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
Mar 19 Python
Python实现AES加密,解密的两种方法
Oct 03 Python
用pushplus+python监控亚马逊到货动态推送微信
Jan 29 Python
Python list列表删除元素的4种方法
Nov 01 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
3
2006/10/09 PHP
PHP检测移动设备类mobile detection使用实例
2014/04/14 PHP
php常用正则函数实例小结
2016/12/29 PHP
基于jQuery的日期选择控件
2009/10/27 Javascript
JavaScript常用脚本汇总(一)
2015/03/04 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
jquery实现的V字形显示效果代码
2015/10/27 Javascript
在React框架中实现一些AngularJS中ng指令的例子
2016/03/06 Javascript
详解微信小程序 wx.uploadFile 的编码坑
2017/01/23 Javascript
javascript自执行函数
2017/02/10 Javascript
vue利用axios来完成数据的交互
2018/03/23 Javascript
原生js实现拖拽功能基本思路详解
2018/04/18 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
JS集合set类的实现与使用方法示例
2019/02/01 Javascript
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 jQuery
[02:56]《DAC最前线》之国外战队抵达上海备战亚洲邀请赛
2015/01/28 DOTA
天翼开放平台免费短信验证码接口使用实例
2013/12/18 Python
Python编程中对文件和存储器的读写示例
2016/01/25 Python
Python登录系统界面实现详解
2019/06/25 Python
自定义django admin model表单提交的例子
2019/08/23 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
2020/06/11 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
CSS3中动画属性transform、transition和animation属性的区别
2016/09/25 HTML / CSS
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
24个canvas基础知识小结
2014/12/17 HTML / CSS
文明班级建设方案
2014/05/15 职场文书
2014年新农村建设工作总结
2014/12/01 职场文书
罚款通知怎么写
2015/04/22 职场文书
2016七夕情人节寄语
2015/12/04 职场文书
导游词之北京明十三陵
2019/10/28 职场文书
go xorm框架的使用
2021/05/22 Golang
Nginx反向代理至go-fastdfs案例讲解
2021/08/02 Servers
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS
Zabbix对Kafka topic积压数据监控的问题(bug优化)
2022/07/07 Servers