Systemd记录了以这种方式在单位名称中转义非字母数字字符的主要规则:
将任何“ /”字符替换为“-”,并将所有其他非ASCII字母数字或“ _”字符替换为C样式的“ \ x2d”转义符。
还有一个转义的例子:
$ systemd-escape -u 'Hall\xc3\xb6chen\x2c\x20Meister' Hallöchen, Meister
让我们忽略琐碎的替换"/"
-> "-"
。我正在尝试取消使用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
。可以简化一下吗?
答案 0 :(得分:1)
像在python3示例中一样,使用字节字符串esc = r'...'
代替原始字符串esc = b'...'
:
>>> esc = b'Hall\xc3\xb6chen\x2c\x20Meister'
>>> esc.decode('utf-8')
'Hallöchen, Meister'