2012-02-17 7 views
11

python2には、string-escapeunicode-escapeがあります。 UTF-8バイトの文字列、文字列エスケープは\をエスケープと非ASCIIバイトを保つことができるために、のような:python3 unicode-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' 

エンコードされていないバイトはすべてエスケープされ、エンコードエラーにつながります。

これには解決策がありますか? Python3では非ASCIIバイトをすべて保持し、すべてのエスケープ文字をデコードすることは可能ですか?

答えて

6
import codecs 
codecs.getdecoder('unicode_escape')('你好\\n') 
関連する問題