我用PyQt4创建了一个Python 2 GUI应用程序,它有两个条目。第一个采用文件名,第二个采用文本写入文件。
我想在两者中输入阿拉伯语文本,所以我写了这个函数:
def makefile(self):
self.name_file=str(self.lineEdit.text()).decode("utf-8")
self.string=str(self.lineEdit_2.text()).decode("utf-8")
file=open(self.name_file,"w")
file.write(self.string)
file.close()
当我输入英文字母时,它工作正常,但当我输入阿拉伯语时,我收到以下错误:
UnicodeEncodeError:'ascii'编解码器无法编码位置0-2的字符:序数不在范围内(128)
答案 0 :(得分:1)
您没有编写代码来从您的unicode转换为UTF-8,而是编写了从UTF-8转换为unicode的代码。这就是你得到的错误。
decode("utf-8")
表示
使用UTF-8编码的二进制文件
str
并转换为unicode
字符串。
相反,encode("utf-8")
表示
使用
unicode
字符串并使用UTF-8编码为二进制str
。
您似乎正在尝试将文本编码为UTF-8,因此您可以使用UTF-8编码将其写入文件。因此,您应该使用encode()
代替decode()
。
此外,您还需要使用QString
值,该值为unicode,并在其上调用str()
。这会尝试使用ASCII将其更改为二进制str
,这对您的阿拉伯文本不起作用,并导致您看到的异常。并且它不是你想要做的,无论如何 - 你想使用UTF-8,而不是ASCII。因此,请勿将其转换为二进制文件str
,并使用unicode
将其转换为unicode()
对象。
所以,例如,而不是
str(self.lineEdit_2.text()).decode("utf-8")
你应该写
unicode(self.lineEdit_2.text()).encode("utf-8")