Python版本之间的编码差异(变音符号)

时间:2018-01-26 17:57:26

标签: python character-encoding raspberry-pi

我正在尝试从我的Raspberry Pi发送一封包含Python附件的电子邮件。 以下代码(email.py)在我使用sudo python3 email.py但不通过sudo python email.py时有效。

######WRITE EMAIL AND SEND
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
import locale

locale.setlocale(locale.LC_TIME, "de_DE")

attachment = 0
fromaddr = 'MAIL@gmail.com'
toaddr = ['MAIL@gmail.com']
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = ", ".join(toaddr)
msg['Subject'] = 'ÄÖÜäöü'
body = 'Ääüäöü'
msg.attach(MIMEText(body, 'plain',_charset='latin-1'))
filename = 'Picture'
for file in os.listdir('/path/to/Pictures/'):
    if file.__contains__('.png'):
        a_file=file
        attachment = open('/path/to/pi/Pictures/'+a_file, 'rb')
part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename= %s' % filename)
msg.attach(part)
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(fromaddr, 'Password')
text = msg.as_string()
print ('# Sending mail')
server.sendmail(fromaddr, toaddr, text)
server.quit()
print('# Mail Sent')

使用python方法时遇到的错误是:

SyntaxError: Non ASCII character \xc3 in file email.py on line XX but no encoding declared; see htttp://python.org/dev/peps/pep-0263/ for details. 元音ÄÖÜ...导致问题。

我知道不同的python版本使用不同的编码作为默认值,而python3使用utf-8。 以某种方式python email.py使用了另一种编码,我不知道如何更改它。

我想知道我必须在代码中添加特定的编码指令,以便代码可以在两个python版本上运行。

1 个答案:

答案 0 :(得分:1)

Python2使用ASCII作为默认编码。但是,您可以定义要使用的编码。

在脚本中添加以下行,以提示您的python使用utf-8编码。

#coding=utf-8

在python3的情况下你没有收到任何错误,因为它使用utf-8作为默认编码。