html内嵌javascript中unicode的处理

接着上一篇爬虫处理,发现内嵌javascript里使用的中文字符是以unicode编码\uxxxx形式出现。

fnick=\u5200\u5200\u72d7\u7ae5\u8bdd\u96c6\">\n

但python用正则表达式读取的时候是把这些\uxxxx当作ascii码来处理,于是为了转义,在每个字符前又加了反斜杠,成为\\uxxx。

a='\\u5200\\u5200\\u72d7\\u7ae5\\u8bdd\\u96c6'

所以问题就是怎么把这个字符改成python能正常辨认的字符串str类型。

python中相关对象分str和unicode,可以用type命令查看。那么其实a的对象是str,编码则是ascii

>>> type(a)
<type 'str'>
>>> chardet.detect(a)
{'confidence': 1.0, 'encoding': 'ascii'}

而对于python,要赋值一个unicode对象可以使用

>>> b=u'\u5200\u5200\u72d7\u7ae5\u8bdd\u96c6'
>>> print b
刀刀狗童话集
>>> type(b)
<type 'unicode'>

这样子再配合exec函数就可以成功转换了,然后只需要把unicode对象encode成str对象就行了。

>>> exec "c=u'"+a+"'"
>>> c
u'\u5200\u5200\u72d7\u7ae5\u8bdd\u96c6'
>>> d=c.encode('utf-8')
>>> d
'\xe5\x88\x80\xe5\x88\x80\xe7\x8b\x97\xe7\xab\xa5\xe8\xaf\x9d\xe9\x9b\x86'
>>> print(d)
刀刀狗童话集
>>> chardet.detect(d)
{'confidence': 0.98999999999999999, 'encoding': 'utf-8'}