Текущий архив: 2006.10.29;
Скачать: CL | DM;
Вниз
base64 в почте Найти похожие ветки
← →
grisme © (2006-10-08 09:45) [0]как известно, контент писем кодируется base64. :) При кодировании берутся группы по 3 байта и на выходе одной группы - 4 байта, соответственно, а если размер наполнения не кратен 3? какие байты дописываются до кратности?
← →
IMHO © (2006-10-08 09:49) [1]
> grisme © (08.10.06 09:45)
>
> как известно, контент писем кодируется base64.
Как известно, кодировки контента писем могут быть: 7Bit, 8Bit, Base64, Binary, BinHex, Quoted, UUEncode (может, что-то еще упустил)
← →
grisme © (2006-10-08 09:53) [2]вопрос именно по base64 :)
← →
Чапаев © (2006-10-08 10:21) [3]Выдрано из FAQ DelphiWorld.
Как известно, байт состоит из восьми битов :)
В один байт можно вложить 256 цифр, от 0 до 255. Однако, если вместо восьми байт использовать только шесть, то объем вложенной информации уменьшается до 64 цифр, от 0 до 63. Теперь главное: любую цифру 6-ти битового байта можно представить в виде печатного символа. 64 символа это не так много, us-ascii символов вполне хватит. Ниже представлен 64-х символьный base64 "алфавит".
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
где код символа A - 0, а код символа / - 63. Вроде, понятно. Что дальше?
А далее берутся три последовательных байта по восемь бит (всего 24 бита), и побитно делятся на четыре 6-ти битных байта (всего 24 бита). Немного странно звучит: "шестибитный байт". На самом деле бит восемь, однако используются только 6 младших бит, два старших бита игнорируются. Схематично такое "деление три к четырем" можно представить себе так:
В приведенном примере три числа 103, 193 и 58 были закодированы в base64 формат. В результате мы получили 4-х символьный стринг Z8E6. Т.о. на практике увидели идеологию перевода двоичной информации в текст по принципу 3 к 4.
Основываясь на этом принципе, мы можем закодировать любую двоичную информацию в текст, причем не очень сильно увеличивая ее объем (на 30%). Затем наша информация через почтовый сервер попадет к нужному адресату, почтовик которого декодирует текст в двоичный файл.
Все довольны, все смеются.
"Но..", скажите Вы, - "что делать, если у нас нет трех байтов? Есть только один или два!" В этом случае в конец четырех символьного стринга добавляется символ = (равно). Если не хватает (до трех) одного байта, то добавляется один символ "равно":
Z8E=
если не хватает двух байт, то добавляются два символа "равно":
Z8==
Что радует: с символами "равно" надо разбираться только один раз - при чтении конца файла. На этом вроде бы все... Нет, еще не все. Формат base64 имеет ограничение - общая длина строки, состоящая из 4-х символьных стрингов составляет 72 символа (за исключением самой последней строки - там уже сколько получится).
← →
grisme © (2006-10-08 10:26) [4]Чапаев, спасибо :) подтвердил информацию, найдя в RFC 2045.
низкий поклон :)
← →
Percent (2006-10-08 10:30) [5]Формат base64 имеет ограничение - общая длина строки, состоящая из 4-х символьных стрингов составляет 72 символа (за исключением самой последней строки - там уже сколько получится).
Где траву такую забористую берут?
2 grisme ©
См. тут: http://cc.borland.com/Item.aspx?id=21951
← →
Percent (2006-10-08 10:32) [6]подтвердил информацию, найдя в RFC 2045.
Уникально... RFC под рукой, а он на форуме спрашивает...
← →
grisme © (2006-10-08 10:34) [7]RFC под рукой оказался примерно параллельно с временем ответа Чапаева :)
ну, уж не сердчайте..:)
← →
Percent (2006-10-08 10:41) [8]RFC под рукой оказался
Ну хоть адрес-то записал, где эти RFC складируются?...
← →
grisme © (2006-10-08 10:49) [9]http://www.faqs.org/rfcs/rfc2045
путешествуй там :)
← →
Чапаев © (2006-10-08 10:49) [10]> [5] Percent (08.10.06 10:30)
А какие претензии? "Поток" данных в base64 разбивается на строки в 72 символа длиной.
← →
grisme © (2006-10-08 10:50) [11]Чапаев © (08.10.06 10:49) [10]
Щаз он до RFC доберется - тоже просвятится ;)
← →
grisme © (2006-10-08 10:52) [12]эта, убери из ссылки rfc2045 :) курить мне меньше нада
← →
Percent (2006-10-08 11:04) [13]grisme © (08.10.06 10:49) [9]
http://www.faqs.org/rfcs/rfc2045
путешествуй там :)
Мне не надо. Я тебе рекомендовал ссылку сохранить...
"Поток" данных в base64 разбивается на строки в 72 символа длиной.
Это относится к MIME.
Но никоим образом не к BASE64.
Да и не 72, а 76 символов (если уже про MIME говорить).
Щаз он до RFC доберется - тоже просвятится ;)
Спасибо, я уже читал. Давно. На память не жалуюсь.
← →
Чапаев © (2006-10-08 11:11) [14]> [13] Percent (08.10.06 11:04)
Хотя вообще да... base64 -- только способ кодирования...
← →
grisme © (2006-10-08 11:19) [15]Percent (08.10.06 11:04) [13]
извиняюсь, не так понял :)
← →
Anatoly Podgoretsky © (2006-10-08 13:36) [16]С кодированием, а конкретно с количеством символов в последней строке полный бардак.
← →
Kolan © (2006-10-08 13:44) [17]
> grisme © (08.10.06 09:45)
нули
Есть же наверняка описание...
← →
Anatoly Podgoretsky © (2006-10-08 13:48) [18]Kolan © (08.10.06 13:44) [17]
Такую систему в помойку.
Система на выходе должна выдавать ту же последовательность, что и на входе, без всяких нулей.
А то что бардак, подверждает такой популярный почтальнон как The Bat!
Он не выполняет не то, что правило 72/76/80, но и правило четырех.
← →
Чапаев © (2006-10-08 14:40) [19]> А то что бардак, подверждает такой популярный почтальнон
> как The Bat!
Хе... Помнится, раз это чудо закинуло в base64 русскоязычное имя вложения. А расширение в соответствии с какой-то прихотью перенесло на следующую строку. В итоге Бат у получателя отказался такое вложение читать. Пришлось вручную eml править.
← →
Anatoly Podgoretsky © (2006-10-08 14:43) [20]Это другая ошибка, которая доказывает, что с Base64 надо работать осторожно. У них вообще количество глюков на мегабайт программы резко превосходит средний уровень.
← →
фри (2006-10-10 21:17) [21]а естьли у вас реализация base64 на С++ или PHP
Страницы: 1 вся ветка
Текущий архив: 2006.10.29;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.038 c