在Python2中,有string-escape
和unicode-escape
。对于UTF-8字节字符串,string-escape
可以转义\并保留非ASCII字节,例如:
"你好\\n".decode('string-escape')
'\xe4\xbd\xa0\xe5\xa5\xbd\n'
然而,在Python3中,string-escape
已被移除。我们需要将字符串编码为字节,并使用unicode-escape
进行解码:
"This\\n".encode('utf_8').decode('unicode_escape')
'This\n'
它可以使用ASCII字节,但非ASCII字节也会被转义:
"你好\\n".encode('utf_8')
b'\xe4\xbd\xa0\xe5\xa5\xbd\\n'
"你好\\n".encode('utf_8').decode('unicode_escape').encode('utf_8')
b'\xc3\xa4\xc2\xbd\xc2\xa0\xc3\xa5\xc2\xa5\xc2\xbd\n'
所有非ASCII字节都被转义,这会导致编码错误。
那么有没有解决方法呢?在Python3中是否可能保留所有非ASCII字节并解码所有转义字符?
('ä½\xa0好\n', 8)
。 - Karl Knechtel