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异常处理总结
Aug 15 Python
Tornado协程在python2.7如何返回值(实现方法)
Jun 22 Python
Python3安装Scrapy的方法步骤
Nov 23 Python
Flask框架Flask-Principal基本用法实例分析
Jul 23 Python
Python对切片命名的实现方法
Oct 16 Python
python微信公众号之关注公众号自动回复
Oct 25 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
Dec 30 Python
python图形开发GUI库pyqt5的基本使用方法详解
Feb 14 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
Feb 26 Python
Python经纬度坐标转换为距离及角度的实现
Nov 01 Python
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
Apr 13 Python
Python趣味挑战之实现简易版音乐播放器
May 28 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中使用redis队列操作实例代码
2013/02/07 PHP
php session_start()出错原因分析及解决方法
2013/10/28 PHP
php简单实现MVC
2015/02/05 PHP
PHP读取PPT文件的方法
2015/12/10 PHP
php+MySQL实现登录时验证登录名和密码是否正确
2016/05/10 PHP
php 解决substr()截取中文字符乱码问题
2016/07/18 PHP
Laravel框架控制器的middleware中间件用法分析
2019/09/30 PHP
详解使用php-cs-fixer格式化代码
2020/09/16 PHP
控制打印时页眉角的代码
2007/02/08 Javascript
JavaScript 滚轮事件使用说明
2010/03/07 Javascript
javascript学习笔记(六) Date 日期类型
2012/06/19 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
使用js对select动态添加和删除OPTION示例代码
2013/08/12 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
2015/03/24 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
JavaScript地理位置信息API
2016/06/11 Javascript
angularjs实现文字上下无缝滚动特效代码
2016/09/04 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
2017/02/13 Javascript
JS请求servlet功能示例
2017/06/01 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
html中通过JS获取JSON数据并加载的方法
2017/11/30 Javascript
vue-baidu-map 进入页面自动定位的解决方案(推荐)
2018/04/28 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
2018/09/05 Javascript
JS中的防抖与节流及作用详解
2019/04/01 Javascript
js判断鼠标移入移出方向的方法
2020/06/24 Javascript
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
在Django中URL正则表达式匹配的方法
2018/12/20 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
Pytorch Tensor 输出为txt和mat格式方式
2020/01/03 Python
python3中确保枚举值代码分析
2020/12/02 Python
纯css3(无图片/js)制作的几个社交媒体网站的图标
2013/03/21 HTML / CSS
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
机关办公室岗位职责
2014/04/16 职场文书
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js