接着上一篇爬虫处理,发现内嵌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'}