如何将阿拉伯语文本从PyQt4转换为UTF-8

时间:2016-03-25 13:01:55

标签: python python-2.7 pyqt4 encode arabic

我用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)

1 个答案:

答案 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")