python3 unicode-escape不能用于非ascii字节?

时间:2012-02-17 12:12:51

标签: python python-3.x

在python2中,有string-escapeunicode-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字节并解码所有转义字符?

1 个答案:

答案 0 :(得分:6)

import codecs
codecs.getdecoder('unicode_escape')('你好\\n')