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中华路'你知道他们是怎么到那里的吗?下面的答案似乎是假设它们是Python字符串文本(来自例如repr
),但它们也可以是JSON字符串(使用JSON.loads
),或者其他一些使用\u
转义但可能具有不同边缘大小写的格式。选择错误的格式可能会导致更多的损坏。