Python2 下 Unicode 的一个小bug
2014-04-06 12:58
232 查看
关于Python的编码问题已经是老生常谈了,此处主要是介绍一个罕见的问题,也算是Python2的一个bug了(Python3不会有此问题)。
在有时候我们去爬取网页或者调用一些第三方库获取文本的时候,有可能会出现这样一种情况:
在一个unicode对象里内容居然是GBK的编码!这时候无论你怎么encode或decode,要么是抛错,要么是乱码。
实际上这种情况不应该出现的,在Python3里这种情况是不合法的会抛错。但Python2容许了其存在,就造成了很多问题。
解决办法很简单,一个小trick,利用"latin-1"编码的特殊性:
这时候的 unicode_str 便是合法的unicode对象了,print一下就能看到你所期待的结果了!
在有时候我们去爬取网页或者调用一些第三方库获取文本的时候,有可能会出现这样一种情况:
invalid_str = u"\xbd\xf4\xb4\xd5\xd0\xcd\xb3\xb5"
在一个unicode对象里内容居然是GBK的编码!这时候无论你怎么encode或decode,要么是抛错,要么是乱码。
实际上这种情况不应该出现的,在Python3里这种情况是不合法的会抛错。但Python2容许了其存在,就造成了很多问题。
解决办法很简单,一个小trick,利用"latin-1"编码的特殊性:
unicode_str = invalid_str.encode('latin-1').decode('gbk')
这时候的 unicode_str 便是合法的unicode对象了,print一下就能看到你所期待的结果了!
相关文章推荐
- Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
- 使用python-google-places 一个严重的bug 错误提示:lat_lng must be a dict with the keys, 'lat' and 'lng'
- Python Unicode字符串格式化中的一个陷阱
- Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
- 菜鸟学Python(5):IDLE的一个bug(怎么总遇到bug?)
- 检查一个ttf文件是否支持一个给定unicode. python写的
- 一个诡异的BUG: Python导入的模块运行过程中变成了None
- 发现apache的mod_python存在一个BUG
- python安装第三方包之后无法导入相应模块(一个容易忽略的bug)
- Ubuntu 13.10 下 Python2.7版 PIL 的一个bug修复
- python-sphinx 2.6.5的一个bug
- Python 官方代码threading模块的一个死锁的bug
- python3中遇到的一个bug TypeError: is_empty() takes 0 positional arguments but 1 was given
- 菜鸟学Python(5):IDLE的一个bug(怎么总遇到bug?)
- xlsreadwriteII2的一个unicode的bug
- 深入分析在Python模块顶层运行的代码引起的一个Bug
- 深入分析在Python模块顶层运行的代码引起的一个Bug
- python orm框架sqlalchemy执行更新、删除时遇到的一个bug
- python orm框架sqlalchemy执行更新、删除时遇到的一个bug
- 使用patch修补python中serial.tools中的一个Bug