Computer system that correctly handles 8 bit character encodings
"8-битная чистота" – это характеристика компьютерных систем, каналов связи и других устройств и программного обеспечения, которые обрабатывают 8-битные кодировки символов, не интерпретируя ни один байт как управляющий код в канале передачи данных.
8 bit clean is an attribute of computer systems, communication channels, and other devices and software, that process 8 bit character encodings without treating any byte as an in band control code.
История
До начала 1990-х годов многие программы и каналы передачи данных были ориентированы на символы и рассматривали некоторые символы, например, ETX, как управляющие символы. Другие предполагали поток семибитных символов со значениями от 0 до 127; например, стандарт ASCII использовал только семь бит на символ, избегая восьмибитного представления для экономии затрат на передачу данных. На компьютерах и каналах связи, использующих восьмибитные байты, старший бит каждого байта оставался свободным для использования в качестве бита четности, флаг-бита или бита управления метаданными. Семибитные системы и каналы связи не могут напрямую обрабатывать более сложные символы, которые широко используются в странах с нелатинскими алфавитами. Бинарные файлы, состоящие из октетов, не могут быть переданы напрямую по семибитным каналам передачи данных. Для решения этой проблемы были разработаны кодировки, преобразующие двоичные данные в текст, использующие только семибитные символы ASCII. Некоторые из этих кодировок: uuencoding, Ascii85, SREC, BinHex, Kermit и Base64 из MIME. Системы на базе EBCDIC не могут обрабатывать все символы, используемые в данных, закодированных с помощью UUencoding. Однако кодировка Base64 не имеет этой проблемы.
Until the early 1990s, many programs and data transmission channels were character oriented and treated some characters, e. g., ETX, as control characters. Others assumed a stream of seven bit characters, with values between 0 and 127; for example, the ASCII standard used only seven bits per character, avoiding an 8 bit representation in order to save on data transmission costs. On computers and data links using 8 bit bytes this left the top bit of each byte free for use as a parity, flag bit, or meta data control bit. 7 bit systems and data links are unable to directly handle more complex character codes which are commonplace in non English speaking countries with larger alphabets. Binary files of octets cannot be transmitted through 7 bit data channels directly. To work around this, binary to text encodings have been devised which use only 7 bit ASCII characters. Some of these encodings are uuencoding, Ascii85, SREC, BinHex, kermit and MIME's Base64. EBCDIC based systems cannot handle all characters used in UUencoded data. However, the base64 encoding does not have this problem.
SMTP и NNTP 8-битная чистота
Исторически для передачи сообщений использовались различные среды, некоторые из которых поддерживали только 7-битные данные, поэтому 8-битные сообщения имели высокие шансы на искажение при передаче в 20-м веке. Однако некоторые реализации не обращали внимания на формальные ограничения для 8-битных данных и позволяли передавать байты с установленным старшим битом. Такие реализации называют "чистыми для 8 бит" (8 bit clean). В общем, коммуникационный протокол считается "чистым для 8 бит", если он корректно передает старший бит каждого байта в процессе обмена данными. Многие ранние стандарты коммуникационных протоколов, такие как (для SMTP), (для NNTP) и , были разработаны для работы через такие "7-битные" каналы связи. Они специально требовали использования набора символов ASCII, "передаваемого в виде 8-битного байта с обнуленным старшим битом", и некоторые из них явно ограничивали все данные 7-битными символами. В течение первых нескольких десятилетий существования сетей электронной почты (с 1971 года до начала 1990-х годов) большинство сообщений электронной почты представляли собой простой текст в 7-битном наборе символов US ASCII. Определение SMTP, как и его предшественник , ограничивает Интернет-почту строками (не более 1000 символов) из 7-битных символов US ASCII. Поле заголовка Content Transfer Encoding=binary требует "чистую для 8 бит" транспортировку. указывает, что "NNTP работает через любой надежный двунаправленный 8-битный канал передачи данных" и изменяет набор символов для команд на UTF-8. Однако, все еще ограничивает набор символов ASCII, включая и MIME-кодирование данных, не входящих в ASCII. Интернет-сообщество обычно добавляет функциональность посредством расширений, обеспечивая связь в обоих направлениях между обновленными и необновленными машинами, вместо того, чтобы объявлять ранее соответствующие стандартам устаревшие программы "неработоспособными" и требовать обновления всего программного обеспечения во всем мире до последней версии стандарта. В середине 1990-х годов люди возражали против "просто отправки 8 бит (на SMTP-серверы)", возможно, из-за опасения, что "просто отправка 8 бит" является неявным объявлением о том, что ISO 8859-1 станет новым "стандартным кодированием", заставляя всех в мире использовать один и тот же набор символов. Вместо этого, рекомендуемый способ использования каналов, "чистых для 8 бит", между машинами – использовать расширение ESMTP 8BITMIME для тела сообщения и расширение SMTP SMTPUTF8 для заголовков сообщения. Несмотря на это, некоторые почтовые агенты передачи, в частности Exim и qmail, пересылают почту на серверы, которые не рекламируют поддержку 8BITMIME, не выполняя преобразование в 7-битный MIME (обычно quoted printable, "QP-преобразование"), требуемое этим стандартом. Такое отношение "просто отправь 8" на самом деле не вызывает проблем на практике, поскольку практически все современные почтовые серверы "чисты для 8 бит".
Historically, various media were used to transfer messages, some of them only supporting 7 bit data, so an 8 bit message had high chances to be garbled during transmission in the 20th century. But some implementations really did not care about formal discouraging of 8 bit data and allowed high bit set bytes to pass through. Such implementations are said to be 8 bit clean. In general, a communications protocol is said to be 8 bit clean if it correctly passes through the high bit of each byte in the communication process. Many early communications protocol standards, such as (for SMTP), (for NNTP) and , were designed to work over such "7 bit" communication links. They specifically require the use of ASCII character set "transmitted as an 8 bit byte with the high order bit cleared to zero" and some of these explicitly restrict all data to 7 bit characters. For the first few decades of email networks (1971 to the early 1990s), most email messages were plain text in the 7 bit US ASCII character set. The definition of SMTP, like its predecessor , limits Internet Mail to lines (1000 characters or less) of 7 bit US ASCII characters. The header field Content Transfer Encoding=binary requires an 8 bit clean transport. specifies "NNTP operates over any reliable bi directional 8 bit wide data stream channel." and changes the character set for commands to UTF 8. However, still limits the character set to ASCII, including and MIME encoding of non ASCII data. The Internet community generally adds features by extension, allowing communication in both directions between upgraded machines and not yet upgraded machines, rather than declaring formerly standards compliant legacy software to be "broken" and insisting that all software worldwide be upgraded to the latest standard. In the mid 1990s, people objected to "just send 8 bits (to SMTP servers)", perhaps because of a perception that "just send 8 bits" is an implicit declaration that ISO 8859 1 become the new "standard encoding", forcing everyone in the world to use the same character set. Instead, the recommended way to take advantage of 8 bit clean links between machines is to use the ESMTP 8BITMIME extension for message bodies and the SMTP SMTPUTF8 extension for message headers. Despite this, some mail transfer agents, notably Exim and qmail, relay mail to servers that do not advertise 8BITMIME without performing the conversion to 7 bit MIME (typically quoted printable, "Q P conversion") required by This "just send 8" attitude does not in fact cause problems in practice, since virtually all modern email servers are 8 bit clean.