从非ascii字符串解码Python 3中转义的unicode

从非ascii字符串解码Python 3中转义的unicode,python,unicode,encoding,escaping,decode,Python,Unicode,Encoding,Escaping,Decode,我已经搜索了几个小时,想找到一种方法来完全反转str.encode-call的结果,如下所示: "testäch基er".encode("cp1252", "backslashreplace") 结果是 b'test\xe4ch\\u57faer' 现在我想用 b'test\xe4ch\\u57faer'.decode("cp1252") 我得到 'testäch\\u57faer' 那我怎么才能拿到我的护照呢基 返回通过使用decode(“unicode转义”)我几乎达到了目的(本例中

我已经搜索了几个小时,想找到一种方法来完全反转str.encode-call的结果,如下所示:

"testäch基er".encode("cp1252", "backslashreplace")
结果是

b'test\xe4ch\\u57faer'
现在我想用

b'test\xe4ch\\u57faer'.decode("cp1252")
我得到

'testäch\\u57faer'
那我怎么才能拿到我的护照呢基 返回通过使用decode(“unicode转义”)我几乎达到了目的(本例中可以使用),但这假设使用iso8859-1编码的字节不是cp1252,所以80到9F之间的任何字符都是错误的。

好吧

>>> b'test\xe4ch\\u57faer'.decode('unicode-escape')
'testäch基er'
但是
反斜杠替换
->
unicode转义
不是一致的往返行程。如果原始字符串中有反斜杠,它们将不会被
反斜杠替换
编码,而是被
unicode转义
解码,并被意外字符替换

>>> '☃ \\u2603'.encode('cp1252', 'backslashreplace').decode('unicode-escape')
'☃ ☃'

对于使用
错误
回退(如
反斜杠替换
)进行编码的字符串,无法可靠地反向编码。这就是为什么它是一个后备方案,如果你能一直对它进行编码和解码,它将是一个真正的
编码

当我问这个问题时,我对Python还是很陌生的。现在我明白了,这些回退机制只是用于处理意外错误,而不是用于保存和恢复数据。如果您确实需要一种简单可靠的方法来用ASCII编码单个unicode字符,请查看
urllib.parse
模块中的
quote
unquote
函数

提供一些背景资料将是有益的。你在用那些字节做什么?展示它们?或者将它们存储在文件中?嗯:(但这正是我所需要的:一种对任何可以编码的内容进行编码的方法,对其余部分进行转义并在以后对其进行反转。原始字符串中的反斜杠不是问题,因为以前可以处理。我现在决定,最好将错误视为错误,并实现合理的错误处理,而不是试图减轻它们。使用“严格”现在。