Python 处理双转义unicode字符串

Python 处理双转义unicode字符串,python,unicode,python-3.5,Python,Unicode,Python 3.5,我有一个格式错误的字符串数据库。数据如下所示: "street"=>"\"\\u4e2d\\u534e\\u8def\"" "street"=>"中华路" 当它应该是这样的时候: "street"=>"\"\\u4e2d\\u534e\\u8def\"" "street"=>"中华路" 我的问题是,当双转义字符串来自数据库时,它们并没有被解码为应该的汉字。假设我有这个变量street=“\”\\u4e2d\\u534e\\u84def\”如果我打印print(st

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

"street"=>"\"\\u4e2d\\u534e\\u8def\""
"street"=>"中华路"
当它应该是这样的时候:

"street"=>"\"\\u4e2d\\u534e\\u8def\""
"street"=>"中华路"
我的问题是,当双转义字符串来自数据库时,它们并没有被解码为应该的汉字。假设我有这个变量
street=“\”\\u4e2d\\u534e\\u84def\”
如果我打印
print(street)
结果是一个代码点字符串
“\u4e2d\u534e\u84def”


此时如何将
“\u4e2d\u534e\u8def”
转换为实际的unicode字符?

您可以在每个
'\\u'
处删除引号。这将为您提供表示十六进制数的字符串形式的字符。然后,对于每个字符串,您可以将其转换为
int
,然后使用以下命令返回到字符串:


首先将此字符串编码为
utf8
,然后使用
unicode转义
对其进行解码,该转义将为您处理
\

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

然后,如果需要,您可以剥离

根据您编写的内容,数据库似乎正在存储一个带有非unicode字符的字符串的可评估ascii表示形式

>>> eval("\"\\u4e2d\\u534e\\u8def\"")
'中华路'
Python为此提供了一个内置函数

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

唯一的区别是对所需的内部报价使用
\“
而不是

只需使用eval函数:
eval(\“\\u4e2d\\u534e\\u8def\”)
'中华路'@TerryJanReedy你完全正确。我一定一直在想python 2,尽管我现在看到了
python-3.5
标记。这个解决方案应该适用于Python2或Python3,虽然这很好(如果不是OP特别要求的话),但只需使用eval函数:
eval(\“\\u4e2d\\u534e\\u8def\”)
is
中华路'repr
),但它们也可以是JSON字符串(使用
JSON.loads
),或者其他一些使用
\u
转义但可能具有不同边缘大小写的格式。选择错误的格式可能会导致更多的损坏。