Python - 阿拉伯语转换不正确

2 投票
2 回答
599 浏览
提问于 2025-04-17 07:06

我正在做一个项目,里面需要用到阿拉伯语,我使用的是pyqt这个工具。在一个文本框里,我输入阿拉伯语,然后把这些阿拉伯语存到一个变量里,用Python来读取。但是我尝试过使用UTF-8编码,结果还是不行。

举个例子,我在文本框里输入:

بسم الله الرحمن الرحيم

但是当我读取这个文本框的内容时,得到的变量却是这样的:

???? ????? ????

如果我不使用Unicode编码,就会出现错误提示:

ASCII编码无法编码这些字符。

我该怎么才能让变量的内容和我在文本框里输入的阿拉伯语一样呢?


代码是:

    item=dir(self.listWidget.selectedItems())
    item=self.listWidget.currentItem()
    content=self.textEdit.toPlainText()
    content = unicode(content, "utf-8")
    FROMADDR = ""
    LOGIN = FROMADDR
    PASSWORD = ""
    TOADDRS = str(item.text())
    SUBJECT = "Invitation"


    msg = ("From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n"
    % (FROMADDR, ", ".join(TOADDRS), SUBJECT) )
    msg += ((u"%s")%content)#"some text\r\n" 
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.set_debuglevel(1)
    server.ehlo()
    server.starttls()
    server.login(LOGIN, PASSWORD)
    server.sendmail(FROMADDR, TOADDRS, msg)
    server.quit()

2 个回答

1

这是一个关于Windows命令提示符的问题。它不能稳定地显示Unicode字符。你需要使用像IDLE这样的集成开发环境(IDE)来显示和检查你的输出。

更多信息可以在这个问题中找到 在Windows终端输出Unicode字符,以及他们提供的一些链接中。

1

使用合适的 email包 中的类,可以确保编码正确进行:

from email.mime.text import MIMEText
from email.header import Header
...

LOGIN = ''
PASSWORD = ''
SUBJECT = u'Invitation'
FROMADDR = u''
TOADDRS = unicode(self.listWidget.currentItem().text())
CONTENT = unicode(self.textEdit.toPlainText())

encoding = 'utf-8'

msg = MIMEText(CONTENT, 'plain', encoding)
msg['Subject'] = Header(SUBJECT, encoding)
msg['From'] = Header(FROMADDR, encoding)
msg['To'] = Header(TOADDRS, encoding)

server = smtplib.SMTP('smtp.gmail.com', 587)
server.set_debuglevel(1)
server.ehlo()
server.starttls()
server.login(LOGIN, PASSWORD)
server.sendmail(FROMADDR, [TOADDRS], msg.as_string())
server.quit()

撰写回答