Python转码问题的解决方法
更新时间:2008年10月07日 23:50:38 作者:
在Python中,可以对String调用decode和encode方法来实现转码。
比如,若要将某个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.
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使用chardet判断字符串编码的方法
- python实现unicode转中文及转换默认编码的方法
- Python中使用不同编码读写txt文件详解
- python将图片文件转换成base64编码的方法
- python3编码问题汇总
- python实现中文转换url编码的方法
- 跟老齐学Python之坑爹的字符编码
- Python设置默认编码为utf8的方法
- 学习python处理python编码问题
- 详解Python中使用base64模块来处理base64编码的方法
- 简单解决Python文件中文编码问题
- python轻松实现代码编码格式转换
- python自然语言编码转换模块codecs介绍
- 使用python的chardet库获得文件编码并修改编码
- Python 十六进制整数与ASCii编码字符串相互转换方法
- Python使用email模块对邮件进行编码和解码的实例教程
- Python处理JSON时的值报错及编码报错的两则解决实录
- Python字符编码转码之GBK,UTF8互转
相关文章
python导出requirements.txt的几种方法总结
这篇文章主要介绍了python导出requirements.txt的几种方法总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-02-02Python中urllib+urllib2+cookielib模块编写爬虫实战
这篇文章主要介绍了Python的urllib+urllib2+cookielib模块编写爬虫实战,文中给出了抓取豆瓣同城和登陆图书馆查询图书归还的爬取例子,需要的朋友可以参考下2016-01-01
最新评论