Python - арабское преобразование не правильно - PullRequest
2 голосов
/ 26 ноября 2011

Я работаю над проектом, в котором используется арабский язык, и я использую 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 голос
/ 26 ноября 2011

Это проблема с командной строкой Windows. Он не может надежно отображать символы Юникода. Вам нужно использовать IDE, например IDLE, для отображения и проверки вашего вывода.

В этом вопросе есть дополнительная информация Вывод символов юникода в терминале Windows и в некоторых ссылках, которые они дают.

1 голос
/ 26 ноября 2011

Используйте соответствующие почтовые пакеты классы, чтобы обеспечить правильное кодирование:

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()
...