Декодер заголовка электронной почты Python для python2.7 или python3, похоже, имеет странное поведение при переключении между закодированным и некодированным текстом.
from email.header import decode_header
print decode_header("=?ISO-8859-1?B?QA==?=example.com");
print decode_header("=?ISO-8859-1?B?QA==?= example.com");
print decode_header("=?ISO-8859-1?Q?=40example?= .com");
print decode_header("=?ISO-8859-1?Q?=40example?=.com");
Вот результат
[('=?ISO-8859-1?B?QA==?=example.com', None)]
[('@', 'iso-8859-1'), ('example.com', None)]
[('@example', 'iso-8859-1'), ('.com', None)]
[('=?ISO-8859-1?Q?=40example?=.com', None)]
Во всех входных примерах кодированный текст является просто знаком @, и он должен интерпретироваться правильно, но это не так. Я думаю, что интерпретация RFC 1342 кажется мне неправильной. Python ожидает пробел или символ новой строки как конец закодированного текста. Я не вижу этого в RFC, RFC только говорит, что нужно пространство между несколькими закодированными текстами, когда я читаю это, а не между закодированным текстом и незакодированными частями текста. Поэтому всякий раз, когда вы видите «? =», Вы должны рассматривать это как конец закодированного текста, чего не делает python. Я хочу спросить экспертов, если это ошибка здесь или если я ошибся?
Виджай