python 3.5 完全正确的Unicode编码的字符串string不能正确解码
python 3.5 完全正确的Unicode编码的字符串string不能正确解码
str格式的啊,print()出来还是\u格式的Unicode码
我也来答一发。
我和题主遇到的问题估计是一样的。
具体什么情况呢?
我们采集一个网页,但是呢,网页有时候编码是混码,这就造成了python 3+的阵痛。
什么是混码呢?
就是网页的源代码一部分是Unicode编码,一部分是其他格式的编码,造成了在网页内容decode()的时候,一部分没正确解码。「你别管人家网页是怎么正确显示的,反正在我们程序内部显示不正确,输出也不正确」
什么是python 3+的阵痛呢?
混码一直是各种编程的阵痛。。。。。
python 3+之后的版本,无论输入输出是什么格式,中间转接的都是Unicode格式。在python运行时,自动给你转到Unicode,输出的时候再转一遍换成需要的输出格式。
比如你输入的时候是汉字,python内部的过程是 '请'→'\u8bf7'→'请'。
那么在网页中你截取的是'请'字,输出没什么问题,也是输出'请'
如果你在网页中截取的是['\u8bf7', '不', '要'],那么你的输出也是'\u8bf7'
但是呢,其实你想截取 '\u8bf7' , 输出 '请' 字。
python中'\u8bf7'的编码是什么呢? → '\\u8bf7'
比如我在网页中re出来的
图中第二行 '\u51ac\u5b63\u7684'....... 等等吧,它的格式是<class 'str'>
我想要的是什么呢?
是 '冬季的美丽很少人' 这样的汉字。
为什么呢?
因为图中第二行 '\u51ac\u5b63\u7684' 在python的中间层中的编码是 '\\u51ac\\u5b63\\u7684' ,输出的时候解码、转码都是转成 '\u51ac\u5b63\u7684' ,也就造成了我们无法得到我们想要的结果。
处理方法知乎上面的Karma、myd7349 都给出了处理方法,那就是
text.encode('latin-1').decode('unicode_escape')
对于部分字符串是混合编码的,我是这样处理的:
if photo_discribe.startswith('\\u'):
#print(type(photo_discribe))
#print(photo_discribe)
photo_discribe = photo_discribe.encode('latin-1').decode('unicode_escape')
#print(photo_discribe)
哈哈哈哈哈,我是在给伸手党提供代码。
版权声明:
作者:xinyu2ru
链接:https://www.rxx0.com/jinzhan/python-3-5-wan-quan-zheng-que-di-unicode-bian-ma-di-zi-fu-chuan-string-bu-neng-zheng-que-jie-ma.html
来源:RUBLOG-分享我的生活
文章版权归作者所有,未经允许请勿转载。
澳门银座
博主的文章写得非常棒 很喜欢