2017-01-26 2 views
0

ユーザの入力を8進UTF-8バイトで受け取り、通常のUTF-8文字に変換しようとしています。これは時にそれが必要「è°¢」印刷し242 \ 260 \ 350 \例えば、文字のユーザ入力Python 3.5としてOctal UTF-8 Byetを取る

input = ((self.field.get(1.0,END)).split('\n\'))) 
print (bytes(input[0], 'utf-8').decode('unicode_escape')) 

:入力はTkinterでは入力フィールド(フィールド)から取られている、これは私がそれを処理しています方法です印刷 谢。

b'\350\260\252'.decode('utf-8') 

は正しい文字を返しますが、これはユーザーの入力を受けようとしても役に立たないものです。ユーザーの入力を直接バイトとして受け取る方法はありますか、それともデコードを行う良い方法がありますか?どんな助けもありがたいです

+0

http://stackoverflow.com/questions/14820429/how-do-i-decodestring-escape-in​​-python3 –

答えて

0

うん、unicode_escapeは、エスケープシーケンスのバイトテストからユニコード文字列に変換するのにちょっと変わっています。あなたは "Latin-1の文字化けを通じて往復" を使用できトリック:

>>> br'\350\260\252'.decode('unicode_escape') 
'è°ª' 
>>> _.encode('l1').decode('u8') 
'谪' 

(ラテン-1は、最初の256個のコード・ポイントの1対1のマッピングがあるので、動作します。)そしてundocumented codecs.escape_decodeもあります:

>>> codecs.escape_decode(br'\350\260\252')[0].decode() 
'谪' 

は当然のことながら、これらのコーデックの両方は、本質的に、特にPythonの構文に向けて調整されたので、あなただけの進エスケープを処理するために独自のロールする必要があります。

関連する問題