首页 > 解决方案 > 如何在 python 3 中解析这样的字符串以使用 `\\x` 转换字符串中已经存在的十六进制字符

问题描述

例子。

x = "\\x20Please\\x20try\\x20again\\x20later"

y = parse_string(x)

print(y)
## It should be converted to "Please try again later".

我试过 URLDecoder 的 unquote 方法。我试图编码(“utf-8”),但没有用。我正在考虑查找和替换,以防没有标准功能可用于处理这些问题。

标签: python-3.xunicodehex

解决方案


您必须首先将其转换回字节对象 - 为此您使用“charmap 编码”对其进行编码:即可以提供任何 0-256 代码点字符到字节的“往返”并再次返回的编码。“latin1”就是这样一种编码。

然后,使用特殊的“unicode 转义”字符编解码器将结果解码回文本 - 这会将“物理”\\字符解析为转义码的一部分,就像在源代码中解析字符串时发生的情况一样。

对不起,如果这听起来很复杂 - 实际上它要简单得多:

In [40]: x = "\\x20Please\\x20try\\x20again\\x20later"                                                    

In [41]: y = x.encode("latin1").decode("unicode escape")                                                  

In [42]: print(y)         
 Please try again later

推荐阅读