Почему мы используем Base64? - PullRequest
       66

Почему мы используем Base64?

229 голосов
/ 21 августа 2010

Википедия говорит

Схемы кодирования Base64 обычно используются, когда необходимо кодировать двоичные данные, которые необходимо хранить и передавать по носителям, предназначенным для работы с текстовыми данными.данные.Это сделано для того, чтобы гарантировать, что данные остаются без изменений во время транспортировки.

Но разве данные не всегда сохраняются / передаются в двоичном формате, потому что память, которую наши машины хранят в двоичном виде, зависит только от того, какВы интерпретируете это?Таким образом, независимо от того, кодируете ли вы битовую комбинацию 010011010110000101101110 как Man в ASCII или как TWFu в Base64, вы в конечном итоге собираетесь сохранить ту же битовую комбинацию.

Если конечное кодированиес точки зрения нулей и единиц, и каждая машина и носитель могут иметь с ними дело, как это имеет значение, если данные представлены в виде ASCII или Base64?

Что это означает "носители, которые предназначены для обработкис текстовыми данными "?Они могут иметь дело с бинарным => они могут иметь дело с чем угодно.


Спасибо всем, я думаю, что теперь я понимаю.

Когда мы отправляем данные, мы не можем быть уверены, что данныебудет интерпретироваться в том же формате, как мы и предполагали.Итак, мы отправляем данные, закодированные в каком-то формате (например, Base64), который понимают обе стороны.Таким образом, даже если отправитель и получатель интерпретируют одни и те же вещи по-разному, но поскольку они согласовывают кодированный формат, данные не будут интерпретироваться неправильно.

С Пример Mark Byers

Если я хочу отправить

Hello
world!

Один из способов - отправить его в ASCII, например

72 101 108 108 111 10 119 111 114 108 100 33

Но байт 10 может неправильно интерпретироваться как символ новой строки на другом конце.Таким образом, мы используем подмножество ASCII для его кодирования следующим образом:

83 71 86 115 98 71 56 115 67 110 100 118 99 109 120 107 73 61 61

, что за счет большего количества данных, передаваемых для того же объема информации, гарантирует, что получатель может декодировать данные заданным образом, дажеесли получатель имеет разные интерпретации для остальной части набора символов.

Ответы [ 12 ]

5 голосов
/ 21 августа 2010

В дополнение к другим (несколько длинным) ответам: даже если игнорировать старые системы, которые поддерживают только 7-битный ASCII, основными проблемами с предоставлением двоичных данных в текстовом режиме являются:

  • Обычно переводы строкипреобразован в текстовом режиме.
  • Следует соблюдать осторожность, чтобы не рассматривать NUL-байт как конец текстовой строки, что слишком легко сделать в любой программе с происхождением C.
3 голосов
/ 21 августа 2010

Что означает «носители, предназначенные для работы с текстовыми данными»?

Назад в тот день, когда ASCII управлял миром, имея дело со значениями не-ASCII, была головная боль. Люди перепрыгивали через всевозможные обручи, чтобы передавать их по проводам, не теряя информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...