处理双重逃脱的unicode字符串

时间:2017-01-19 03:58:39

标签: python unicode python-3.5

我有一个格式错误的字符串数据库。数据如下所示:

"street"=>"\"\\u4e2d\\u534e\\u8def\""

应该是这样的:

"street"=>"中华路"

我遇到的问题是,当双重转义字符串来自数据库时,它们不会被解码为中文字符。所以假设我有这个变量; street="\"\\u4e2d\\u534e\\u8def\""如果我打印print(street),则结果是一串代码点"\u4e2d\u534e\u8def"

此时我可以做些什么来将"\u4e2d\u534e\u8def"转换为实际的unicode字符?

3 个答案:

答案 0 :(得分:5)

首先将此字符串编码为utf8,然后使用unicode-escape对其进行解码,以便为您处理\\

>>> line = "\"\\u4e2d\\u534e\\u8def\""
>>> line.encode('utf8').decode('unicode-escape')
'"中华路"'

然后,您可以根据需要删除"

答案 1 :(得分:3)

您可以在每个'\\u'删除stripsplit的引号。这会将字符作为表示十六进制数字的字符串。然后,对于每个字符串,您可以将其转换为int并返回到带有chr的字符串:

>>> street = "\"\\u4e2d\\u534e\\u8def\""
>>> ''.join(chr(int(x, 16)) for x in street.strip('"').split('\\u') if x)
'中华路' 

答案 2 :(得分:2)

根据您所写的内容,数据库似乎存储了一个带有非unicode字符的字符串的eval-uable ascii表示。

>>> eval("\"\\u4e2d\\u534e\\u8def\"")
'中华路'

Python有一个内置函数。

>>> ascii('中华路')
"'\\u4e2d\\u534e\\u8def'"

唯一的区别是使用\"代替'来获取所需的内部报价。