2017-03-09 66 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字符串转换回字节。 –

相关问题