Введение
Бинарное кодирование текста Quoted Printable, или кодирование QP, — это система кодирования бинарных данных в текст, использующая печатаемые символы ASCII (буквенно-цифровые и знак равенства =) для передачи 8-битных данных по 7-битному каналу или, в общем случае, по среде, не поддерживающей передачу 8-битных данных без искажений. Исторически сложилось так, что из-за широкого спектра систем и протоколов, используемых для передачи сообщений, электронная почта часто считалась не поддерживающей 8-битные данные, однако современные SMTP-серверы в большинстве случаев поддерживают 8-битные данные и расширение 8BITMIME. QP также может использоваться для данных, содержащих недопустимые октеты или превышающих лимиты длины строки SMTP. Оно определено как кодирование передачи контента MIME для использования в электронной почте. QP работает, используя знак равенства = в качестве управляющего символа. Также ограничивается длина строки до 76 символов, поскольку некоторые программные обеспечения имеют ограничения на длину строки.
Quoted Printable, or QP encoding, is a binary to text encoding system using printable ASCII characters (alphanumeric and the equals sign =) to transmit 8 bit data over a 7 bit data path or, generally, over a medium which is not 8 bit clean. Historically, because of the wide range of systems and protocols that could be used to transfer messages, e mail was often assumed to be non 8 bit clean – however, modern SMTP servers are in most cases 8 bit clean and support 8BITMIME extension. It can also be used with data that contains non permitted octets or line lengths exceeding SMTP limits. It is defined as a MIME content transfer encoding for use in e mail. QP works by using the equals sign = as an escape character. It also limits line length to 76, as some software has limits on line length.
Введение
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.