如何使用Python将unicode字符串转换为真正的字符串

时间:2016-02-23 12:42:53

标签: python json unicode web-crawler

我使用Python通过urllib2获取一些信息,但信息是unicode字符串。

我尝过类似下面的内容:

a = "\u65b9\u6cd5\uff0c\u5220\u9664\u5b58\u50a8\u5728"
print unicode(a).encode("gb2312")

a = "\u65b9\u6cd5\uff0c\u5220\u9664\u5b58\u50a8\u5728"
print a.encode("utf-8").decode("utf-8")

a = "\u65b9\u6cd5\uff0c\u5220\u9664\u5b58\u50a8\u5728"
print u""+a

a = "\u65b9\u6cd5\uff0c\u5220\u9664\u5b58\u50a8\u5728"
print str(a).decode("utf-8")

a = "\u65b9\u6cd5\uff0c\u5220\u9664\u5b58\u50a8\u5728"
print str(a).encode("utf-8")

a = "\u65b9\u6cd5\uff0c\u5220\u9664\u5b58\u50a8\u5728"
print a.decode("utf-8").encode("gb2312")

但所有结果都是一样的:

\u65b9\u6cd5\uff0c\u5220\u9664\u5b58\u50a8\u5728

我希望得到以下中文文本:

方法,删除存储在

2 个答案:

答案 0 :(得分:2)

您需要将string转换为unicode string

首先,a中的反斜杠会自动转义:

a = "\u65b9\u6cd5\uff0c\u5220\u9664\u5b58\u50a8\u5728"

print a # Prints \u65b9\u6cd5\uff0c\u5220\u9664\u5b58\u50a8\u5728

a       # Prints '\\u65b9\\u6cd5\\uff0c\\u5220\\u9664\\u5b58\\u50a8\\u5728'

所以玩这个转义字符串的编码/解码没什么区别。

您可以使用unicode literal或将字符串转换为unicode string

要使用unicode literal,只需在字符串前面添加u

a = u"\u65b9\u6cd5\uff0c\u5220\u9664\u5b58\u50a8\u5728"

要将现有string转换为unicode string,您可以使用unicode作为unicode_escape参数调用encoding

print unicode(a, encoding='unicode_escape') # Prints 方法,删除存储在

我打赌你从string回复得到了JSON,所以第二种方法可能就是你需要的。

BTW,unicode_escape编码是一种特定于Python的编码,用于

  

在Python源代码中生成一个适合作为Unicode文字的字符串   代码

答案 1 :(得分:0)

您从哪里获取此数据?也许您可以共享下载和提取它的方法。

无论如何,它看起来像是一些JSON编码字符串的残余?基于这个假设,这是一个非常hacky(并不是非常严重)的方法:

>>> a = "\u65b9\u6cd5\uff0c\u5220\u9664\u5b58\u50a8\u5728"
>>> a
'\\u65b9\\u6cd5\\uff0c\\u5220\\u9664\\u5b58\\u50a8\\u5728'
>>> s = '"{}"'.format(a)
>>> s
'"\\u65b9\\u6cd5\\uff0c\\u5220\\u9664\\u5b58\\u50a8\\u5728"'
>>> import json
>>> json.loads(s)
u'\u65b9\u6cd5\uff0c\u5220\u9664\u5b58\u50a8\u5728'
>>> print json.loads(s)
方法,删除存储在

这涉及通过将a中的给定字符串用双引号括起来然后将JSON字符串解码为Python unicode字符串来重新创建有效的JSON编码字符串。