部分点滴小tips备忘

python Unicode转汉字

>>> a = '\u6709\u65f6\u5019\u4f60\u6293\u7d27\u67d0\u4e9b\u4e1c\u897f\uff0c\u5e76\u4e0d\u662f\u56e0\u4e3a\u4f60\u60f3\u8981\u7559\u4f4f\u5b83\u4eec\uff0c\u800c\u662f\u56e0\u4e3a\u653e\u624b\u5b9e\u5728\u592a\u96be\u4e86\u3002","love":"359","translation":"\u5c0f\u7f16\u7684\u8bdd\uff1a\u5176\u5b9e\u751f\u6d3b\u4e2d\u6709\u5f88\u591a\u65e0\u5948\u7684\uff0c\u5c31\u50cf\u72e0\u72e0\u5730\u6525\u4f4f\u4e00\u628a\u6c99\u5b50\uff0c\u4f60\u4f1a\u53d1\u73b0\u8d8a\u7528\u529b\uff0c\u6d41\u5931\u5f97\u8d8a\u5feb\uff1b\u5c31\u50cf\u7262\u7262\u5730\u5957\u4f4f\u4e0d\u5c5e\u4e8e\u4f60\u7684\u7231\u60c5\uff0c\u54ea\u6015\u904d\u4f53\u9cde\u4f24\uff0c\u53ea\u662f\u56e0\u4e3a\u653e\u624b\u4f1a\u8ba9\u4f60\u66f4\u75db\u82e6\u3002'

# print a.decode('unicode-escape').encode('utf-8')
>>> print a.decode('unicode-escape')

>>> 有时候你抓紧某些东西,并不是因为你想要留住它们,而是因为放手实在太难了。","love":"359","translation":"小编的话:其实生活中有很多无奈的,就像狠狠地攥住一把沙子,你会发现越用力,流失得越快;就像牢牢地套住不属于你的爱情,哪怕遍体鳞伤,只是因为放手会让你更痛苦。

 

在爬虫抓取网页信息时常需要将类似"\u4eba\u751f\u82e6\u77ed\uff0cpy\u662f\u5cb8"转换为中文,实际上这是unicode的中文编码。可用以下方法转换:

>>> s = u'\u4eba\u751f\u82e6\u77ed\uff0cpy\u662f\u5cb8'
>>> print s
人生苦短,py是岸

 

或者:

>>> s = r'\u4eba\u751f\u82e6\u77ed\uff0cpy\u662f\u5cb8'
>>> s = s.decode('unicode_escape')
>>> print s
人生苦短,py是岸

 

在python2的字符编码问题时常会遇到“UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)”的编码错误。

而用以下方法通常可以解决:

1 import sys
2 reload(sys)
3 sys.setdefaultencoding('utf-8')

此方法是将Python2的默认编码ASCII改为 utf-8。但此方法不是一劳永逸的,可能会使一些代码的行为变得怪异。

这篇文章中有更多详细的说明:https://blog.ernest.me/post/python-setdefaultencoding-unicode-bytes 

 

 

 

待续

 

posted @ 2019-02-11 10:57  念槐聚  阅读(153)  评论(0)    收藏  举报