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编写脚本获取手机当前应用apk的信息
Jul 21 Python
python从入门到精通(DAY 1)
Dec 20 Python
Python实现的快速排序算法详解
Aug 01 Python
详解Python实现多进程异步事件驱动引擎
Aug 25 Python
Python学习_几种存取xls/xlsx文件的方法总结
May 03 Python
python判断一个集合是否为另一个集合的子集方法
May 04 Python
在Python3 numpy中mean和average的区别详解
Aug 24 Python
Python使用Slider组件实现调整曲线参数功能示例
Sep 06 Python
Tensorflow读取并输出已保存模型的权重数值方式
Jan 04 Python
python 安装impala包步骤
Mar 28 Python
Softmax函数原理及Python实现过程解析
May 22 Python
python用字节处理文件实例讲解
Apr 13 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中使用excel的简单介绍
2013/08/02 PHP
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
dojo随手记 gird组件引用
2011/02/24 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
2013/06/06 Javascript
js实现的二级横向菜单条实例
2015/08/22 Javascript
浅谈javascript中onbeforeunload与onunload事件
2015/12/10 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
Angular 2应用的8个主要构造块有哪些
2016/10/17 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
2016/11/10 Javascript
js继承实现方法详解
2016/12/16 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
JavaScript数组和对象的复制
2017/03/21 Javascript
JavaScript 基础表单验证示例(纯Js实现)
2017/07/20 Javascript
浅谈Vue的加载顺序探讨
2017/10/25 Javascript
解决vue-cli创建项目的loader问题
2018/03/13 Javascript
微信小程序实现通过js操作wxml的wxss属性示例
2018/12/06 Javascript
vue-resource:jsonp请求百度搜索的接口示例
2019/11/09 Javascript
WebStorm中如何将自己的代码上传到github示例详解
2020/10/28 Javascript
[01:16]DOTA2小知识课堂 Ep.03 芒果树无伤肉山
2019/12/05 DOTA
Python的爬虫框架scrapy用21行代码写一个爬虫
2017/04/24 Python
PyTorch搭建一维线性回归模型(二)
2019/05/22 Python
python操作文件的参数整理
2019/06/11 Python
html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点
2013/01/09 HTML / CSS
Booking.com美国:全球酒店预订网站
2017/04/18 全球购物
Linux的主要特性
2016/09/03 面试题
我的梦中国梦演讲稿
2014/04/23 职场文书
优质护理服务演讲稿
2014/05/07 职场文书
暑期政治学习心得体会
2014/09/02 职场文书
公司党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
高中生期中考试失利检讨书
2014/10/23 职场文书
地道战观后感
2015/06/04 职场文书
人与自然的观后感
2015/06/18 职场文书
宿舍管理制度范本
2015/08/07 职场文书
接收函
2019/04/22 职场文书
话题作文之诚信
2019/11/28 职场文书
利用For循环遍历Python字典的三种方法实例
2022/03/25 Python