我有一个格式错误的字符串数据库。数据如下所示:
"street"=>"\"\\u4e2d\\u534e\\u8def\""
应该是这样的:
"street"=>"中华路"
我遇到的问题是,当双重转义字符串来自数据库时,它们不会被解码为中文字符。所以假设我有这个变量; street="\"\\u4e2d\\u534e\\u8def\""
如果我打印print(street)
,则结果是一串代码点"\u4e2d\u534e\u8def"
此时我可以做些什么来将"\u4e2d\u534e\u8def"
转换为实际的unicode字符?
答案 0 :(得分:5)
首先将此字符串编码为utf8
,然后使用unicode-escape
对其进行解码,以便为您处理\\
:
>>> line = "\"\\u4e2d\\u534e\\u8def\""
>>> line.encode('utf8').decode('unicode-escape')
'"中华路"'
然后,您可以根据需要删除"
答案 1 :(得分:3)
您可以在每个'\\u'
删除strip
和split
的引号。这会将字符作为表示十六进制数字的字符串。然后,对于每个字符串,您可以将其转换为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'"
唯一的区别是使用\"
代替'
来获取所需的内部报价。