Двоично-текстовое кодирование

редактировать

A двоичное-текстовое кодирование - это кодирование из данных в обычном тексте. Точнее, это кодирование двоичных данных в последовательности печатаемых символов. Эти кодировки необходимы для передачи данных, когда канал не поддерживает двоичные данные (например, электронная почта или NNTP ) или не является 8-битным чистым. В документации PGP (RFC 4880 ) используется термин «ASCII armor » для двоичного кодирования текста при ссылке на Base64.

Содержание
  • 1 Описание
  • 2 Кодирование обычного текста
  • 3 Стандарты кодирования
  • 4 Примечания
  • 5 Ссылки
Описание

The ASCII стандарт кодирования текста использует 128 уникальных значений (0–127) для представления буквенных, цифровых и знаков пунктуации, обычно используемых в английском языке, плюс набор управляющих кодов, которые не представляют печатные символы. Например, заглавная буква A - это символ ASCII 65, цифра 2 - это ASCII 50, символ} - это ASCII 125, а метасимвол возврат каретки - это ASCII 13. Системы, основанные на ASCII, используют семь битов для представления эти значения в цифровом виде.

Напротив, большинство компьютеров хранят данные в памяти, организованные в восьмибитные байты. Файлы, содержащие машинно-исполняемый код и нетекстовые данные, обычно содержат все 256 возможных восьмибитовых байтовых значений. Многие компьютерные программы стали полагаться на это различие между семибитным текстом и восьмиразрядными двоичными данными и не будут работать должным образом, если в данных, которые, как ожидается, будут включать только текст ASCII, будут появляться символы, отличные от ASCII. Например, если значение восьмого бита не сохраняется, программа может интерпретировать значение байта выше 127 как флаг, указывающий на выполнение некоторой функции.

Однако часто бывает желательно иметь возможность отправлять нетекстовые данные через текстовые системы, например, когда можно прикрепить файл изображения к сообщению электронной почты. Для этого данные каким-то образом кодируются, так что восьмибитные данные кодируются в семибитные символы ASCII (обычно с использованием только буквенно-цифровых символов и знаков пунктуации - печатаемых символов ASCII ). После безопасного прибытия в пункт назначения он затем декодируется обратно в свою восьмибитную форму. Этот процесс называется двоичным кодированием текста. Многие программы выполняют это преобразование, чтобы разрешить передачу данных, например, PGP и GNU Privacy Guard (GPG).

Кодирование обычного текста

Методы двоичного кодирования в текст также используются в качестве механизма кодирования обычного текста. Например:

  • Некоторые системы имеют более ограниченный набор символов, который они могут обрабатывать; они не только не 8-битные чистые, некоторые даже не могут обрабатывать каждый печатаемый символ ASCII.
  • В других системах есть ограничения на количество символов, которые могут появляться между разрывами строк, например ограничение «1000 символов в строке» для некоторых программ SMTP, как разрешено RFC 2821.
  • Третьи добавляют заголовки или трейлеры к тексту.
  • Несколько плохо рассматриваемых, но все еще используемых протоколов используют внутриполосную сигнализацию, вызывая путаницу, если появляются определенные шаблоны в сообщении. Самая известная - это строка «От» (включая конечный пробел) в начале строки, используемая для разделения почтовых сообщений в формате файла t_dv.

С помощью кодирования двоичного кода в текст для сообщений, которые уже представляют собой обычный текст, а затем декодирования на другом конце, можно сделать такие системы полностью прозрачными. Иногда это называют «бронированием ASCII». Например, компонент ViewState в ASP.NET использует кодировку base64 для безопасной передачи текста через HTTP POST, чтобы избежать столкновения разделителей .

Стандарты кодирования

В таблице ниже сравниваются наиболее часто используемые формы двоичного кодирования текста. Указанная эффективность - это соотношение между количеством бит на входе и количеством бит в закодированном выходе.

КодированиеТип данныхЭффективностьРеализации языка программированияКомментарии
Ascii85 Произвольный80 %awk, C, C (2), C#, F#, Go, Java Perl, Python, Python (2) Существует несколько вариантов эта кодировка, Base85, btoa и так далее.
Base32 Произвольный62,5%ANSI C, Java, Python
Base36 Integer~ 64%bash, C, C ++, C#, Java, Perl, PHP, Python, Visual Basic, Swift, многие другиеИспользует арабские цифры 0–9 и латинские буквы A – Z (Базовый латинский алфавит ISO ). Обычно используется системами перенаправления URL, такими как TinyURL или SnipURL / Snipr, в качестве компактных буквенно-цифровых идентификаторов.
Base58Integer~ 73%C ++, Python Подобно Base64, но изменено, чтобы избежать использования не буквенно-цифровых символов (+ и /) и буквы, которые могут выглядеть неоднозначно при печати (0 - ноль, I - заглавная i, O - заглавная o и l - строчная L). Сатоши Накамото изобрел схему кодирования base58 при создании биткойна. Некоторые системы обмена сообщениями и социальных сетей перенос строки в строках, отличных от буквенно-цифровых. Этого можно избежать, если не использовать зарезервированные символы URI, такие как +. Для segwit он был заменен на Bech32, см. Ниже. Base58 в исходном коде биткойнов
Bech321 бит (основная или тестовая) плюс от 3 до 40 байтовне простой процент, поскольку он имеет 6-байтовый код исправления ошибок C, C ++, JavaScript, Go, Python, Haskell, Ruby, RustСпецификация. Используется в биткойнах и Lightning Network.
Base62 Аналогично Base64, но содержит только буквенно-цифровые символы.
Base64 Произвольно75%awk, C, C (2), Python, многие другие
Base85 (RFC 1924 )Произвольный80%C, Python Python (2) Исправленная версия Ascii85.
BinHex Произвольный75%Perl, C, C (2) MacOS Classic
Десятичное Целое~42%Большинство языковОбычно представление по умолчанию для ввода / вывода от / для людей.
Шестнадцатеричный (Base16)Произвольный50%Большинство языковИмеется в верхнем регистре и строчные варианты
Intel HEX Произвольная~<50%библиотека C, C ++ Обычно используется для программирования EPROM, NOR-Flash микросхемы памяти
MIME ПроизвольныйСм. Цитируемая печать и Base64 См. Цитированная печать и Base64 Контейнер кодирования для форматирования электронной почты
Формат файла технологии MOS ПроизвольныйОбычно используется для программирования EPROM, NOR-Flash памяти чипсы.
Процентное кодирование Текст (URI ), Произвольный (RFC1738 )~ 40% (33–70%)C, Python, возможно многие другие
Печать в кавычках Текст~ 33–100%Возможно многоСохраняет разрывы строк; обрезает строки по 76 символов
S-запись (Motorola hex)Произвольный49,6%Библиотека C, C ++ Обычно используется для программирования EPROM, Микросхемы памяти NOR-Flash. 49,6% предполагает 255 двоичных байтов на запись.
Tektronix hex ПроизвольныйОбычно используется для программирования EPROM, NOR-Flash микросхемы памяти.
Uuencoding Произвольное~ 60% (до 70% )Perl, C, Java, возможно многие другиеВ значительной степени заменено на MIME и yEnc
Xxencoding Arbitrary~ 75% (аналогично Uuencoding)C Предлагается (и иногда используется) в качестве замены Uuencoding, чтобы избежать проблем с преобразованием набора символов между ASCII и системы EBCDIC, которые могли повредить Uuencoded data
yEnc Arbitrary, m в основном нетекстовые~ 98%C Включает контрольную сумму CRC
RFC 1751 (S / KEY )Произвольный33%C,Python,...

«Соглашение для удобочитаемых 128-битных ключей». Ряд маленьких английских слов легче читать, запоминать и набирать, чем десятичные или другие системы кодирования двоичного текста. Каждое 64-битное число преобразуется в шесть коротких слов, от одного до четырех символов каждое, из общедоступного словаря из 2048 слов.

95 isprint коды с 32 по 126 известны как Печатные символы ASCII.

Некоторые старые и сегодня редко встречающиеся форматы включают BOO, BTOA и кодировку USR.

Большинство этих кодировок генерируют текст, содержащий только подмножество всех печатаемых символов ASCII : например, кодировка base64 генерирует текст, который содержит только верхний и нижний регистры. буквы, (A – Z, a – z), цифры (0–9) и символы «+», «/» и «=».

Некоторые из этих кодировок (печатаемые в кавычках и процентное кодирование) основаны на наборе разрешенных символов и одном escape-символе . Допустимые символы остаются неизменными, а все остальные символы преобразуются в строку, начинающуюся с escape-символа. Такое преобразование позволяет полученному тексту быть почти читаемым, поскольку буквы и цифры являются частью разрешенных символов и поэтому остаются такими, как они есть в закодированном тексте. Эти кодировки обеспечивают самый короткий простой вывод ASCII для ввода, который в основном является печатаемым ASCII.

Некоторые другие кодировки (base64, uuencoding ) основаны на отображении всех возможных последовательностей из шести бит в различные печатаемые символы. Поскольку имеется более 2 = 64 печатных символа, это возможно. Данная последовательность байтов транслируется, рассматривая ее как поток битов, разбивая этот поток на куски по шесть бит и генерируя последовательность соответствующих символов. Различные кодировки различаются отображением между последовательностями битов и символов и форматированием результирующего текста.

Некоторые кодировки (исходная версия BinHex и рекомендуемая кодировка для CipherSaber ) используют четыре бита вместо шести, отображая все возможные последовательности из 4 бит в 16 стандартных шестнадцатеричных цифр. Использование 4 бита на кодированный символ приводит к увеличению длины вывода на 50% по сравнению с base64, но упрощает кодирование и декодирование - расширение каждого байта в источнике независимо до двух закодированных байтов проще, чем расширение base64 с 3 исходных байтов до 4 закодированных байтов.

Из первых 192 кодов PETSCII, 164 имеют видимые изображения в кавычках: 5 (белый), 17–20 и 28–31 (цвета и элементы управления курсором), 32–90 (эквивалент ascii), 91–127 (графика), 129 (оранжевый), 133–140 (функциональные клавиши), 144–159 (цвета и элементы управления курсором) и 160–192 (графика). Теоретически это разрешает кодирование, такое как base128, между машинами, говорящими на языке PETSCII.

Примечания
Ссылки
Последняя правка сделана 2021-05-12 06:24:26
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте