分享我的生活
分享能使人快乐

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出来的

www_5169_info_2016_02_12_16_00_59

 

 

 

图中第二行 ‘\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)
哈哈哈哈哈,我是在给伸手党提供代码。

赞(0)
未经允许不得转载:RUBLOG-分享我的生活 » python 3.5 完全正确的Unicode编码的字符串string不能正确解码

我想说 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #-49

    博主的文章写得非常棒 很喜欢

    澳门银座3年前 (2016-07-20)Reply