Введение

Бинарное кодирование текста Quoted Printable, или кодирование QP, — это система кодирования бинарных данных в текст, использующая печатаемые символы ASCII (буквенно-цифровые и знак равенства =) для передачи 8-битных данных по 7-битному каналу или, в общем случае, по среде, не поддерживающей передачу 8-битных данных без искажений. Исторически сложилось так, что из-за широкого спектра систем и протоколов, используемых для передачи сообщений, электронная почта часто считалась не поддерживающей 8-битные данные, однако современные SMTP-серверы в большинстве случаев поддерживают 8-битные данные и расширение 8BITMIME. QP также может использоваться для данных, содержащих недопустимые октеты или превышающих лимиты длины строки SMTP. Оно определено как кодирование передачи контента MIME для использования в электронной почте. QP работает, используя знак равенства = в качестве управляющего символа. Также ограничивается длина строки до 76 символов, поскольку некоторые программные обеспечения имеют ограничения на длину строки.

Введение

MIME определяет механизмы для отправки различных видов информации по электронной почте, включая текст на языках, отличных от английского, с использованием кодировок символов, отличных от ASCII. Однако эти кодировки часто используют байтовые значения, выходящие за пределы диапазона ASCII, поэтому их необходимо дополнительно кодировать, прежде чем они смогут быть использованы в среде, не поддерживающей 8-битные данные. Кодировка Quoted Printable – один из методов преобразования произвольных байтов в последовательности символов ASCII. Таким образом, Quoted Printable не является кодировкой символов сама по себе, а представляет собой слой кодирования данных, используемый поверх байтовой кодировки символов. Кодировка QP обратима, то есть исходные байты и, следовательно, не-ASCII символы, которые они представляют, могут быть точно восстановлены. Quoted Printable и Base64 – это две кодировки передачи содержимого MIME, если не учитывать тривиальные кодировки "7 бит" и "8 бит". Если текст, подлежащий кодированию, содержит немного не-ASCII символов, то Quoted Printable обеспечивает достаточно читаемый и компактный закодированный результат. С другой стороны, если входные данные содержат много 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 имеют значения, отличные от конца строки (например, в типах медиа), то они должны быть закодированы как =0D и =0A соответственно. Строки закодированных данных Quoted Printable не должны превышать 76 символов. Для соблюдения этого требования без изменения закодированного текста можно добавлять мягкие переносы строк по мере необходимости. Мягкий перенос строки состоит из знака = в конце закодированной строки и не отображается как перенос строки в декодированном тексте. Эти мягкие переносы строк также позволяют кодировать текст без переносов строк (или содержащий очень длинные строки) для среды, где размер строки ограничен, например, ограничение в 1000 символов на строку в некоторых SMTP-программах, как это разрешено в RFC 2821. В заголовках сообщений используется слегка модифицированная версия Quoted Printable; см. MIME#Encoded Word.