2012-04-25 5 views
49

Почему у нас есть кодировка Base64? Я новичок, и я действительно не понимаю, почему вы запутываете байты во что-то другое (если только это не шифрование). В одной из книг я читаю, что кодировка Base64 полезна, когда двоичная передача невозможна. Например. Когда мы отправляем форму, она кодируется. Но почему мы конвертируем байты в буквы? Не могли бы мы просто преобразовать байты в строковый формат с промежутком между ними? Например, 00000001 00000004? Или просто 0000000100000004 без какого-либо пространства, потому что байты всегда входят в пару из 8?Какова реальная цель кодирования Base64?

+8

Потому что вы просто превратили 1 байт в 8, а не в 3 в 4, как в случае с base64 (если память мне правильна). Полоса пропускания конечна. –

+0

Вы вводите в заблуждение биты (с 8 бит вы делаете байт) и байты, которые могут иметь любую группировку. –

ответ

60

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

Примечание: кодирование base64 НЕ является способом шифрования и способ уплотнения данных. Фактически, кодированная часть с кодировкой base64 на 1.333 ... раз больше, чем исходная датапаЦИЯ. Это всего лишь способ убедиться, что никакие данные не теряются или не изменяются во время передачи.

+3

Закодированные данные Base64 равны 1.333 (3) раза больше, чем исходные данные + дополнительные 0-3 дополнительных символа в зависимости от длины входных данных по модулю 4. Это связано с тем, что каждый кодированный base64 символ хранит информацию на 6 бит (64 разных символа). – too

+1

как до, так и после данных все еще являются двоичными. то почему данные получают убытки –

3

Base64 - это более или менее компактный способ передачи (кодирования, по сути, но с целью передачи) любых двоичных данных.

http://en.wikipedia.org/wiki/Base64 См

«Общее правило заключается в выборе набор из 64 символов, то есть как часть подмножества общей для большинства кодировок, а также для печати.»

Это очень общая цель, и общая потребность - не тратить больше места, чем нужно.

Исторически это основано на том факте, что существует общее подмножество (почти) всех кодировок, используемых для хранения символов в байтах, и что много возможных потерь или преобразований в байтах 2^8 при простой передаче данных (для например, последовательность copy-paste-emailsend-emailreceive-copy-paste).

(пожалуйста, перенаправьте ссылку на комментарий Брайана, я просто сделаю его более полным и, надеюсь, более понятным).

+0

Нет, это совсем рано, и мне не хотелось, чтобы я дал полный ответ. Это хорошо. –

+0

См., Я могу отстать от использования Base64 для копирования/вставки двоичных данных в виде текста, не беспокоясь о непечатаемых символах (таких как URL-адрес данных для хранения, скажем, данных изображения, в строке). Я не понимаю, когда люди используют его для кодирования простого текста. Подобно тому, как * Hyper Light Drifter * сохраняет свои данные сохранения в строке JSON и затем кодирует его на Base64.Это лишний дополнительный шаг в сохранении/загрузке, который не делает ничего полезного и занимает дополнительное время и пространство. Если бы их нельзя было трахать, чтобы написать свою собственную систему сохранения, то сколько еще в игре было затушевано? –

3

Base64 - это механизм, позволяющий представлять и передавать двоичные данные по средам, которые допускают только печатные символы. Это наиболее популярная форма «базового кодирования», другие известные в использовании Base16 и Base32.

Необходимость Base64 возникла из-за необходимости прикреплять двоичный контент к электронным письмам, таким как изображения, видео или произвольный двоичный контент. Так как SMTP [RFC 5321] разрешено только 7-битовые символы US-ASCII в сообщениях, существует необходимость представлять эти двоичные потоки октета, используя семь символы ASCII бит ...

Надеется, что это отвечает на вопрос

Смежные вопросы