2017-03-09 74 views
0

我有包含以下格式的Unicode字符的文本文件:如何將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

如果您使用的是Python 2,那是因爲在使用.decode('unicode-escape')之後,您有一個unicode對象,並且fileid.write()只接受字符串對象。然後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'文庫具有相同的'open'執行像Python 3.使用'io.open( 'compare.txt', 'A',編碼= 'UTF-8')'。那麼不需要將Unicode字符串轉換回字節。 –

相關問題