如何取消系统名称的转义?

时间:2019-12-14 07:31:51

标签: python

Systemd记录了以这种方式在单位名称中转义非字母数字字符的主要规则:

  

将任何“ /”字符替换为“-”,并将所有其他非ASCII字母数字或“ _”字符替换为C样式的“ \ x2d”转义符。

还有一个转义的例子:

$ systemd-escape -u 'Hall\xc3\xb6chen\x2c\x20Meister'
Hallöchen, Meister

(文档herehere中的更多信息)

让我们忽略琐碎的替换"/"-> "-"。我正在尝试取消使用Python中的系统名称的转义(没有第3方库)。我尝试过的许多解决方案都行不通,它们将两个字节的UTF-8 "ö"转换为两个字符。

最后,这似乎产生了正确的答案:

>>> esc=r'Hall\xc3\xb6chen\x2c\x20Meister'
>>> esc.encode('latin-1').decode('unicode_escape').encode('latin-1').decode('utf-8')
'Hallöchen, Meister'

如您所见:str -> bytes -> str -> bytes -> str。可以简化一下吗?

1 个答案:

答案 0 :(得分:1)

像在python3示例中一样,使用字节字符串esc = r'...'代替原始字符串esc = b'...'

>>> esc = b'Hall\xc3\xb6chen\x2c\x20Meister'
>>> esc.decode('utf-8')
'Hallöchen, Meister'