2017-05-13 11 views
-1

私は 'ä'のようなdevanagriスクリプト文字をそのユニコード表現\u0905に変換したいと思っています。 以前のpython2.7では、each_character.encode("unicode_escape")を使用していましたが、ここではeach_characterがdevanagriスクリプト文字を参照しています。 しかし、最近私はpython3の作業を開始しました。上記のスニペットを実行すると、次のエラーが表示されます。python3を使ってシンボルをそれぞれのユニコード表現に変換するには?

expected str instance, bytes found

誰もが自分のUnicode表現にすべての文字を変換する方法を提案することができます。私はdevanagri OCRに取り組んでおり、それらを地上の真理として渡すためには、Unicode表現が必要です。

+0

問題を示すサンプルスクリプトを投稿してください。それは数行にすぎないはずです。 – tdelaney

答えて

0

あなたは文字列ではなく、バイトオブジェクトを扱っています。 bytes.decodeメソッドを使用してバイトを文字列に変換する必要があります。

>>> b = b'\xe0\xa4\x85' 
>>> b.decode('utf-8').encode('unicode_escape') 
b'\\u0905' 
>>> print(b.decode('utf-8').encode('unicode_escape').decode()) 
\u0905 

注:使用するエンコーディングに応じてutf-8を変更する必要があります。

注:バイトオブジェクトを反復している場合は、最初にバイトオブジェクトをデコードしてから反復するコードを変更する必要があります。そうしないと、デコードが失敗したり、間違った結果が得られます。

+0

ありがとう。出来た :) – Deep

1

あなたは、このようなUnicode文字列、お持ちの場合:非、

>>> repr(u'अ') 
"u'\\u0905'" 

しかし、Pythonの3:Pythonの2で

text = u'अ' 

を、あなたはエスケープ表現を取得するためにrepr()を使用することができますASCII文字はエスケープされません:

>>> repr(text) 
"'अ'" 

非ASCII文字をエスケープすることです。

:このように、結果は、Python 3(Pythonの2 str)で bytes文字列であるので、あなたは、Unicode文字列が必要な場合、あなたはそれをデコードする必要がある

>>> u'अ'.encode('ascii', errors='backslashreplace') 
b'\\u0905' 

:あなたは、私はこれが好き行うことができます

>>> u'अ'.encode('ascii', errors='backslashreplace').decode('ascii') 
'\\u0905' 

結果はUnicode文字列です。

Python 3のドキュメントへの参照:Converting to Bytes

関連する問題