Quoted-Printable или кодировка QP — это система кодирования двоичного текста с использованием печатаемых символов ASCII ( буквенно-цифровых и знака равенства =
) для передачи 8-битных данных по 7-битному пути данных или, как правило, по среде, которая не является 8-битной . Исторически сложилось так, что из-за широкого спектра систем и протоколов, которые можно было использовать для передачи сообщений, электронная почта часто считалась не-8-битной-чистой — однако современные SMTP- серверы в большинстве случаев являются 8-битными чистыми и поддерживают 8BITMIME
расширение. Его также можно использовать с данными, которые содержат неразрешенные октеты или длины строк, превышающие ограничения SMTP. Он определяется как кодировка передачи контента MIME для использования в электронной почте .
QP работает, используя знак равенства =
в качестве экранирующего символа . Он также ограничивает длину строки до 76, так как некоторые программы имеют ограничения на длину строки.
MIME определяет механизмы для отправки других видов информации в электронной почте, включая текст на языках, отличных от английского , с использованием кодировок символов, отличных от ASCII. Однако эти кодировки часто используют значения байтов за пределами диапазона ASCII, поэтому их необходимо дополнительно кодировать, прежде чем они станут пригодными для использования в среде, отличной от 8-битной. Кодировка Quoted-Printable — это один из методов, используемых для отображения произвольных байтов в последовательности символов ASCII. Таким образом, Quoted-Printable — это не сама схема кодирования символов, а слой кодирования данных, который будет использоваться в некоторой байт-ориентированной кодировке символов. Кодировка QP обратима, то есть исходные байты и, следовательно, не-ASCII символы, которые они представляют, могут быть идентично восстановлены.
Quoted-Printable и Base64 — это два кодирования MIME-контента, если не учитывать тривиальные кодировки «7bit» и «8bit». Если кодируемый текст не содержит много не-ASCII-символов, то Quoted-Printable дает довольно читаемый [1] и компактный закодированный результат. С другой стороны, если на входе много 8-битных символов, то Quoted-Printable становится и нечитаемым, и крайне неэффективным. Base64 не читается человеком, но имеет равномерные накладные расходы для всех данных и является более разумным выбором для двоичных форматов или текста в алфавите, отличном от латинского алфавита .
Любое 8-битное значение байта может быть закодировано тремя символами: =
за которым следуют две шестнадцатеричные цифры (0–9 или A–F), представляющие числовое значение байта. Например, символ перевода страницы ASCII (десятичное значение 12) может быть представлен как =0C
, а знак равенства ASCII (десятичное значение 61) должен быть представлен как =3D
. Все символы, за исключением печатных символов ASCII или символов конца строки (а также =
), должны быть закодированы таким образом.
Все печатные символы ASCII (десятичные значения от 33 до 126) могут быть представлены сами по себе, за исключением =
(десятичного 61, шестнадцатеричного 3D, следовательно =3D
).
Символы табуляции и пробела ASCII , десятичные значения 9 и 32, могут быть представлены сами по себе, за исключением случаев, когда эти символы появляются в конце закодированной строки. В этом случае их необходимо экранировать как (табуляция) или (пробел), или за ними следует (мягкий перенос строки) в качестве последнего символа закодированной строки. Это последнее решение допустимо, поскольку оно не позволяет табуляции или пробелу быть последним символом закодированной строки.=09
=20
=
Если кодируемые данные содержат значимые разрывы строк, они должны быть закодированы как последовательность ASCII CR LF, а не как их исходные значения байтов, ни напрямую, ни через знаки. И наоборот, если значения байтов 13 и 10 имеют значения, отличные от конца строки ( например =
, в типах носителей [2]=0D
), то они должны быть закодированы как и =0A
соответственно.
Строки закодированных данных Quoted-Printable не должны быть длиннее 76 символов. Чтобы удовлетворить это требование без изменения закодированного текста, можно добавлять мягкие переносы строк=
по желанию. Мягкий перенос строк состоит из в конце закодированной строки и не отображается как перенос строки в декодированном тексте. Эти мягкие переносы строк также позволяют кодировать текст без переносов строк (или содержащий очень длинные строки) для среды, где размер строки ограничен, например, ограничение в 1000 символов на строку некоторого программного обеспечения SMTP , как разрешено RFC 2821.
В заголовках сообщений используется слегка измененная версия Quoted-Printable; см. MIME#Encoded-Word .
Следующий пример представляет собой французский текст (в кодировке UTF-8) с высокой частотой букв с диакритическими знаками (например, é ).
J'interdis aux Marchands de vanter trop Leurs Marchandises. Шрифт Car ils = vite p=C3=A9dagogues et t'enseignent comme, но ce qui n'est par суть qu='un moyen, et te trompant ainsi sur la Route =C3=A0 suivre les voil=C3=A0 b=ient=C3=B4t qui te d=C3=A9gradent, car si leur musique est vulgaire ils te =ткань для продажи =C3=A2me vulgaire. =E2=80=94=E2=80=89Антуан де Сент-Экзюп=C3=A9ry, Цитадель (1948)
Это закодировало следующую цитату:
J'interdis aux Marchands de vanter trop Leurs Marchandises. Car ils se font vite pédagogues et t'enseignent comme, но это то, что не является номинальной сущностью qu'un moyen, et te trompant ainsi sur la маршрут à suivre les voilà bientôt qui te degradent, car si leur musique est vulgaire ils te fabriquent pour te la vendre une âme vulgaire.
— Антуан де Сент-Экзюпери , Цитадель (1948)