Python 带重音字母的反斜杠转义字符串到ascii
我有一个表示dict的字符串。该字符串的格式包括“\x7B”之类的字符(抱歉,我不确定该如何称呼它-反斜杠编码?),它还包含格式为“\u00fa”的重音字符(同样,抱歉,我不确定该名称)。我想:Python 带重音字母的反斜杠转义字符串到ascii,python,python-3.x,character-encoding,Python,Python 3.x,Character Encoding,我有一个表示dict的字符串。该字符串的格式包括“\x7B”之类的字符(抱歉,我不确定该如何称呼它-反斜杠编码?),它还包含格式为“\u00fa”的重音字符(同样,抱歉,我不确定该名称)。我想: 将所有“\x7B”样式的字符更改为其相应的“普通”字符,此处为“{” 将所有“\u00fa”样式字符更改为相应的ascii字符(即无重音),此处“\u00fa”变为“u”,因此将变为“u” 很难判断幕后发生了什么,因为当我打印这些字符串时,它会自动将“\x7B”样式的字符转换为其“正常”等效字符 例如,
'\x7B\x22h\x22\x3A\x22Ra\x5Cu00fal\x22\x7D'
转换为'{“h”:“Raul”}
旁注:
我如何才能将'\x7B\x22h\x22\x3A\x22Ra\x5Cu00fal\x22\x7D'
视为'\x7B\x22h\x22\x3A\x22Ra\x5Cu00fal\x22\x7D'
,而不是'{h:“Ra\\u00fal”}
另外,如果您可以包含每个字符串格式(编码?)的专有名称,这样我就可以更新问题名称,使其更适合将来参考,那就太好了。您可以使用
json.loads
将编码字符串转换为dict,然后对其进行规范化,最后将其转换为等效的ascii
>>> import unicodedata
>>> import json
>>>
>>> s = '\x7B\x22h\x22\x3A\x22Ra\x5Cu00fal\x22\x7D'
>>> unicodedata.normalize('NFKD', str(json.loads(s))).encode('ascii','ignore').decode()
"{'h': 'Raul'}"
您正在寻找的术语是反斜杠转义。正如您所看到的,Python负责为您解释转义,除非您从实际包含反斜杠字符本身的数据源读取。至于去除重音字符,我不知道Python,但我可以用文字来回答:诀窍是为哪个字符转换为哪个其他字符创建查找。使用字符代码小于0x80(128)的字符直接使用每个字符0x80及以上的字符代码作为该查找的索引。字符串是否以
\
、x
、7
、B
开头,还是以\x7B
表示的单个字符开头?是否尝试使用'chr()'将其转换为十六进制值的ascii字符?“从实际包含反斜杠字符本身的数据源读取”,在这种情况下,Python转义语法可能根本不相关。例如,它可能是JavaScript语法。“\x7B”是有效的JavaScript,但不是有效的JSON。