Python 3.0以下诡异的中文编码问题

长话短说,问题的由来是使用beautifuSoup时,提取出来有一段中文,但是大部分内容在默认的编码方式下能正常显示,但总有那么一次的内容显示为乱码。

分析原因后发现是u’’和’’的差别,大部分内容显示正常是因为返回的内容是’’的方式,其类型为str,而显示乱码情况下,则以u’’的方式返回的内容,其类型为unicode。说到底就是返回的内容是一样的,但是乱码时候这段内容是被unicode处理过了。怎么办呢?

纠结了好久,发现不是encode与decode能解决这个问题的,已经是一个底层编码方式的问题了,甚至想到是否把编码的原理搞明白透彻了,用数学计算的方式来实现错误编码到正常显示的纠正。后来,发现了一对好用的函数,repr与eval,在python中,对这两个函数的说明是:

In [23]: help(repr)
Help on built-in function repr in module __builtin__:

repr(…)
    repr(object) -> string

    Return the canonical string representation of the object.
    For most object types, eval(repr(object)) == object.

所以想到用字符串处理的方式来解决这个问题,比如一个“我”字的GBK编码是’\xce\xd2’,str类型,而返回的内容是u’\xce\xd2’,unicode类型,先用repr处理u’\xce\xd2’,得到一个u’\xce\xd2’的str的类型,直接字符串截取就可得到’\xce\xd2’,且是str类型,然后使用eval函数便变回到需要的类型及内容,即解决了内容乱码的问题。

收藏与分享

发表评论

电子邮件地址不会被公开。 必填项已用*标注