Почему для передачи двоичных данных в Интернете используется только base64 вместо base128? Набор символов ASCII состоит из 128 символов, которые теоретически могут представлять базу 128, но в большинстве случаев используется только base64, но не base128.
encoding
language-agnostic
binary
Гмадар
источник
источник
Ответы:
Проблема в том, что по крайней мере 32 символа из набора символов ASCII являются «управляющими символами», которые могут быть интерпретированы принимающим терминалом. Например, есть символ BEL (звонок), который заставляет приемный терминал звонить. Есть символы SOT (начало передачи) и EOT (конец передачи), которые выполняют именно то, что подразумевают их имена. И не забудьте символы CR и LF, которые могут иметь особое значение в том, как структуры данных сериализуются / объединяются в поток.
Adobe создала кодировку Base85, чтобы использовать больше символов в наборе символов ASCII, но, как ни странно, она защищена патентами.
источник
btoa
, которая датируется 1990 годом, не обременена патентами, и те, безусловно, в любом случае истекут.Потому что некоторые из этих 128 символов не печатаются (в основном те, которые ниже кода 0x20). Следовательно, они не могут быть надежно переданы в виде строки по проводу. И если вы перейдете выше кодовой точки 128, у вас могут возникнуть проблемы с кодированием из-за разных кодировок, используемых в разных системах.
источник
Как уже говорилось в других ответах, ключевым моментом является сокращение набора символов до печатных . Более эффективная схема кодирования - это basE91, потому что она использует больший набор символов и по-прежнему избегает управляющих / пробельных символов в нижнем диапазоне ASCII. Веб-страница содержит хорошее сравнение эффективности кодирования двоичного кода, base64 и basE91 .
Однажды я подчистил реализацию Java. Если людям интересно, я могу разместить это на GitHub.
Обновление : теперь на GitHub .
источник
То, что первые 32 символа являются управляющими, не имеет абсолютно никакого отношения, потому что вам не нужно использовать их для получения 128 символов. У нас есть 256 символов на выбор, и только первые 32 символа являются управляющими. Остается 192 символа, поэтому 128 вполне возможно без использования управляющих символов.
Вот причина: это должно быть что-то, что будет выглядеть одинаково, и что вы можете копировать и вставлять где угодно. Поэтому должны быть символы, которые будут отображаться одинаково на любом форуме, в чате, в электронной почте и так далее. Это означает, что мы не можем использовать символы, которые форум / чат / почтовые клиенты обычно могут использовать для форматирования или игнорирования. Это также должны быть одинаковые символы, независимо от шрифта, языка и региональных настроек.
Это причина!
источник
Base64 широко распространен, потому что он решает множество проблем (работает почти везде, о чем вы можете подумать)
Вам не нужно беспокоиться о том, является ли транспорт 8-битным или нет.
Все символы в кодировке можно распечатать. Вы можете их увидеть . Вы можете скопировать и вставить их. Вы можете использовать их в URL-адресах (отдельные варианты). и т.п.
Фиксированный размер кодировки. Вы знаете, что
m
байты всегда можно кодировать вn
байты.Все слышали об этом - он широко поддерживается, множество библиотек, с ним так легко взаимодействовать.
Base128 не обладает всеми этими преимуществами.
Похоже, что он 8-битный, но помните, что base64 использует 65 символов. Без внеполосного символа у вас не будет преимуществ фиксированного размера кодировки. Если вы используете внеполосный персонаж, вы больше не сможете быть чистым на 8 бит.
Однако это еще не все отрицательно.
base128 проще кодировать / декодировать, чем base64 - вы просто используете сдвиги и маски. Может быть важным для встроенных реализаций
base128 несколько более эффективно использует транспорт, чем base64, за счет использования большего количества доступных битов.
Люди действительно используют base128 - я сейчас для чего-то использую. Просто это не так часто.
источник
CODES
переменной.Не уверен, но я думаю, что более низкие значения (представляющие управляющие коды или что-то в этом роде) ненадежно передаются как текст / символы внутри HTTP-запросов / ответов, а значения выше 127 могут быть специфичными для локали / кодовой страницы / чего-то особенного, поэтому нет 128 различных символов, которые могут работать во всех браузерах / платформах.
источник
эсаджи прав. Base64 используется для кодирования двоичных данных для передачи с использованием протокола, который ожидает только текст. Это прямо в записи Wiki .
источник
Оформить заказ на PHP-класс base128. Кодирование и декодирование с использованием кодировки ISO 8859-1.
GoogleCode PHP-класс Base128
источник