Python 带重音字母的反斜杠转义字符串到ascii

Python 带重音字母的反斜杠转义字符串到ascii,python,python-3.x,character-encoding,Python,Python 3.x,Character Encoding,我有一个表示dict的字符串。该字符串的格式包括“\x7B”之类的字符(抱歉,我不确定该如何称呼它-反斜杠编码?),它还包含格式为“\u00fa”的重音字符(同样,抱歉,我不确定该名称)。我想: 将所有“\x7B”样式的字符更改为其相应的“普通”字符,此处为“{” 将所有“\u00fa”样式字符更改为相应的ascii字符(即无重音),此处“\u00fa”变为“u”,因此将变为“u” 很难判断幕后发生了什么,因为当我打印这些字符串时,它会自动将“\x7B”样式的字符转换为其“正常”等效字符 例如,

我有一个表示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。