如何在python中将unicode字符转换为各自的符号?

如何在python中将unicode字符转换为各自的符号?,python,unicode,Python,Unicode,我有一个文本文件,其中包含以下格式的unicode字符: \u0935\u094d\u0926\u094d\u0928\u094d\u0935\u094d\u0926\ वर्जनरूपमिति दर्शित्म् । स पूरुषः अमृतत्वाय कल्पते व्द्न्व्द 我想将其转换为以下格式的devnagri字符: \u0935\u094d\u0926\u094d\u0928\u094d\u0935\u094d\u0926\ वर्जनरूपमिति दर्शित्म

我有一个文本文件,其中包含以下格式的unicode字符:

\u0935\u094d\u0926\u094d\u0928\u094d\u0935\u094d\u0926\
वर्जनरूपमिति दर्शित्म् । स पूरुषः अमृतत्वाय कल्पते व्द्न्व्द
我想将其转换为以下格式的devnagri字符:

\u0935\u094d\u0926\u094d\u0928\u094d\u0935\u094d\u0926\
वर्जनरूपमिति दर्शित्म् । स पूरुषः अमृतत्वाय कल्पते व्द्न्व्द
然后将其写入文件。 目前我的代码

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)

有人能帮我吗?

如果您使用的是Python 2,那是因为在使用
.decode('unicode-escape')
之后,您有一个
unicode
对象,并且
fileid.write()
只接受字符串对象。Python然后尝试使用不包含devnagri字符的ASCII编码将对象转换为字节字符串。此转换导致异常

在将unicode字符串写入文件之前,需要手动将其转换回字节字符串:

fileid.write(text.encode('utf-8'))
fileid = open('compare.txt', 'a', encoding='utf-8')
这里我假设您需要UTF-8编码。如果要以另一种编码保存字符,请用该编码的名称替换
'utf-8'

在Python 3中,可以在打开文件时设置使用的编码:

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

那么额外的
.encode('utf-8')
就没有必要了。

你是如何打开文件的?我用
fileid=open('compare.txt','a')打开的。
我想你可能需要看看
codecs
库。你用的是python 2还是python 3?我用的是python 2.7!!非常感谢@cg909。您的解释非常有用。在Python2中,
io
库具有与Python3相同的
open
实现。使用
io.open('compare.txt','a',encoding='utf-8')
。这样就不需要将Unicode字符串转换回字节。