Путаница в цитируемой электронной почте печатной кодировке

Я создаю электронные письма с кодировкой MIME с помощью Python, и я получаю разницу с тем же электронным письмом, которое кодируется MIME SES Amazon.

Я кодирую, используя utf-8 и кавычки-печать.

Для символа "å" (это буква "a" с маленьким кружком сверху) моя кодировка дает

=E5

а другая кодировка производит

=C3=A5

Они оба выглядят нормально в моем Gmail, но мне кажется странным, что кодировка отличается. Является ли одно из них правильным, а другое неправильным в любом случае?

Ниже приведен мой код Python на случай, если это поможет.

====

cs = charset.Charset('utf-8')
cs.header_encoding = charset.QP
cs.body_encoding = charset.QP

# See https://stackoverflow.com/a/16792713/136598
mt = mime.text.MIMEText(None, subtype)
mt.set_charset(cs)
mt.replace_header("content-transfer-encoding", "quoted-printable")
mt.set_payload(mt._charset.body_encode(payload))

person gaefan    schedule 18.06.2017    source источник
comment
Похоже, вы скармливаете текст, закодированный в iso-8859-1, а не в utf-8.   -  person ArturFH    schedule 19.06.2017


Ответы (1)


Хорошо, я смог понять это благодаря комментарию Артура.

Кодировка символа utf-8 составляет два байта, а не один, поэтому вы должны ожидать увидеть две кодировки для печати в кавычках, а не одну, поэтому кодировка AWS SES верна (что неудивительно).

Я отправлял текст Unicode, а не utf-8, который вызывает только один печатный символ в кавычках. Оказывается, это сработало, потому что gmail поддерживает юникод.

Для кода Python в моем вопросе мне нужно вручную закодировать текст как utf-8. Я думал, что MIMEText сделает это за меня, но это не так.

person gaefan    schedule 18.06.2017