python3 unicode-escape对非ASCII字节无效?
在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字节,同时解码所有的转义字符呢?
1 个回答
5
在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在程序中使用这些数据。这个过程就像是从冰箱里拿食材,然后用这些食材做饭一样。
当我们提到“数据”,其实就是指我们在程序中使用的信息。这些信息可以是数字、文字,甚至是图片。为了让程序能够理解这些数据,我们需要把它们放在一个合适的格式里,就像把食材放进锅里一样。
有时候,我们会遇到一些问题,比如数据格式不对,或者程序无法找到需要的数据。这就像是你想做一道菜,但发现冰箱里没有你需要的食材,或者食材坏掉了。
为了避免这些问题,我们可以提前检查数据,确保它们是正确的,并且在需要的时候能够顺利找到。这样,我们的程序就能顺利运行,就像做菜时,所有的食材都准备好了,烹饪过程就会变得简单很多。
总之,处理数据就像做饭一样,需要准备好所有的材料,确保它们都是新鲜的,这样才能做出美味的菜肴。
import codecs
codecs.getdecoder('unicode_escape')('你好\\n')