处理双转义unicode字符串

2024-05-17 03:43:08 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

当它应该是这样的时候:

"street"=>"中华路"

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

此时如何将"\u4e2d\u534e\u8def"转换为实际的unicode字符?你知道吗


Tags: 数据字符串代码数据库street格式错误unicode
3条回答

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

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

如果有必要,您可以剥离"

根据您编写的内容,数据库似乎正在存储一个字符串的可评估的ascii表示,该字符串包含非unicode字符。你知道吗

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

Python对此有一个内置函数。你知道吗

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

唯一的区别是对所需的内部引号使用\"而不是'。你知道吗

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

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

相关问题 更多 >