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脚本使得web页面上的代码高亮显示
Apr 24 Python
Python发送email的3种方法
Apr 28 Python
Android分包MultiDex策略详解
Oct 30 Python
Python设计模式之MVC模式简单示例
Jan 10 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
Jun 23 Python
Python的CGIHTTPServer交互实现详解
Feb 08 Python
Python Xml文件添加字节属性的方法
Mar 31 Python
python3.6使用pickle序列化class的方法
Oct 22 Python
Pandas实现dataframe和np.array的相互转换
Nov 30 Python
Python正则表达式急速入门(小结)
Dec 16 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
Jan 19 Python
Python实现检测文件的MD5值来查找重复文件案例
Mar 12 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入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
2011/07/14 PHP
PHP函数strip_tags的一个bug浅析
2014/05/22 PHP
php绘图之加载外部图片的方法
2015/01/24 PHP
PHP使用PDO 连接与连接管理操作实例分析
2020/04/21 PHP
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
JavaScript中的eval()函数使用介绍
2014/12/31 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
2016/06/08 Javascript
JavaScript中函数声明与函数表达式的区别详解
2016/08/18 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
基于BootStrap栅格栏系统完成网站底部版权信息区
2016/12/23 Javascript
Javascript同时声明一连串(多个)变量的方法
2017/01/23 Javascript
JS控件bootstrap suggest plugin使用方法详解
2017/03/25 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
jQuery EasyUI window窗口使用实例代码
2017/12/25 jQuery
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
微信小程序新手教程之启动页的重要性
2019/03/03 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
Python中运行并行任务技巧
2015/02/26 Python
Python中decorator使用实例
2015/04/14 Python
Python 正则表达式入门(中级篇)
2016/12/07 Python
python记录程序运行时间的三种方法
2017/07/14 Python
python 将数据保存为excel的xls格式(实例讲解)
2018/05/03 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
Pytorch中accuracy和loss的计算知识点总结
2019/09/10 Python
python代码实现图书管理系统
2020/11/30 Python
python实现马丁策略的实例详解
2021/01/15 Python
Pandas直接读取sql脚本的方法
2021/01/21 Python
2014年单位法制宣传日活动总结
2014/11/01 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
募捐感谢信
2015/01/22 职场文书
六一晚会主持词开场白
2015/05/28 职场文书
Django drf请求模块源码解析
2021/06/08 Python
Mysql排序的特性详情
2021/11/01 MySQL
JavaScript中时间格式化新思路toLocaleString()
2021/11/07 Javascript