反斜杠转义字符串,带有带有重音的ascii字母

时间:2019-08-22 22:04:52

标签: python python-3.x character-encoding

我有一个表示字典的字符串。字符串的格式包括“ \ x7B”之类的字符(对不起,我不确定该怎么称呼-反斜杠编码?)它还包含“ \ u00fa”形式的重音字符(再次,对不起,我不确定这叫做什么)。我想:

  1. 将所有“ \ x7B”样式字符更改为其相应的“普通”字符,此处为“ {”
  2. 将所有“ \ u00fa”样式字符更改为相应的ascii字符(即不带重音符号),此处“ \ u00fa”变为“ú”,因此将为“ 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"}'

此外,如果您可以包括每种字符串格式的正确名称(编码?),那么我可以更新问题名称,使其更适合将来参考,那就太好了。

1 个答案:

答案 0 :(得分:1)

您可以使用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'}"