2017-03-09 9 views
0

は、私は次の形式にUnicode文字を含むテキストファイルを持っている:ユニコード文字をPythonのそれぞれのシンボルに変換するには?

\u0935\u094d\u0926\u094d\u0928\u094d\u0935\u094d\u0926\ 

私は、次の形式でdevnagri文字に変換したい:

वर्जनरूपमिति दर्शित्म् । स पूरुषः अमृतत्वाय कल्पते व्द्न्व्द 

し、ファイルに書き込みます。 現在、私のコード

encoded = x.encode('utf-8') 
print (encoded.decode('unicode-escape')) 

は、端末でdevnagri文字を印刷することができます。しかし、ファイルに書き込むときに

text = 'target:'+encoded.decode('unicode-escape')+'\n' 
fileid.write(text) 

私は次のエラーが発生しています。

'ascii' codec can't encode characters in position 7-18: ordinal not in range(128) 

誰も私を助けてくださいことはできますか?

+0

ファイルをどのように開いたのですか? – cg909

+0

'fileid = open( 'compare.txt'、 'a')' – Deep

+0

あなたは 'codecs'ライブラリを見る必要があるかもしれないと思います。 – Petar

答えて

0

.decode('unicode-escape')を使用した後にunicodeオブジェクトがあり、fileid.write()が文字列オブジェクトのみを受け入れるため、Python 2を使用しているとします。 Pythonはdevnagri文字を含まないASCIIエンコーディングを使用してオブジェクトをバイト文字列に変換しようとします。この変換によって例外が発生します。

手動でファイルに書き込む前に戻って、バイト文字列にUnicode文字列を変換する必要があります。ここでは

fileid.write(text.encode('utf-8')) 

私はあなたがUTF-8エンコーディングをしたいと仮定。文字を別のエンコーディングに保存する場合は、'utf-8'をそのエンコーディングの名前に置き換えます。

ファイルを開くときに使用するエンコーディングを設定することができますPythonの3では

fileid = open('compare.txt', 'a', encoding='utf-8') 

その後、余分な.encode('utf-8')は必要ありませんです。

+0

解決済み!ありがとう@ cg909。あなたは説明がとても役に立ちました。 – Deep

+1

Python 2では 'io'ライブラリはPython 3と同じ' open'実装を持っています。 'io.open( 'compare.txt'、 'a'、encoding = 'utf-8')'を使ってください。 Unicode文字列をバイトに変換する必要はありません。 –

関連する問題