Это называется "цитируемой для печати" кодировки.Он определен в RFC 1521. Его цель - заменить необычные значения символов последовательностью нормальных, безопасных символов, чтобы сообщение могло безопасно обрабатываться системой электронной почты.
Фактически здесь существует два уровня кодирования,Сначала буква 'é'
была закодирована в кодировке UTF-8, которая выдает '\xc3\xa9'
, а затем эта кодировка UTF-8 была закодирована в печатную форму в кавычках '=C3=A9'
.используя метод decode
или decodestring
модуля quopri
, задокументированный в https://docs.python.org/3/library/quopri.html Это будет выглядеть примерно так:
import quopri
source = '=C3=A9'
print(quopri.decodestring(source))
Это отменит кодировку для печати в кавычках и покажетВы UTF-8 байтов '\xc3\xa9'
.Чтобы вернуться к букве 'é'
, вам нужно использовать строковый метод decode
и сообщить Python, что эти байты содержат кодировку UTF-8, например:
utf = quopri.decodestring(source)
text = utf.decode('utf-8')
print(text)
UTF-8 только одиниз многих возможных способов кодирования букв в байты.Например, если бы ваш 'é'
был закодирован как ISO-8859-1, он имел бы значение байта '\xe9'
, и его представление для печати в кавычках было бы '=E9'
.
Когда выпри работе с электронной почтой вы должны увидеть заголовок Content-Type , который сообщает вам, какой тип контента отправляется и какая кодировка букв в байты была применена к тексту сообщения (или к отдельному MIMEчасть, в составном сообщении).Если этот текст затем был снова закодирован с применением кодировки для печати в кавычках, этот дополнительный шаг должен указываться заголовком Content-Transfer-Encoding .Таким образом, ваше сообщение с текстом в кодировке UTF-8, передаваемым в формате для печати в кавычках, должно иметь заголовки, которые выглядят следующим образом:
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable