"chunking" в кодированной строке base64 - PullRequest
0 голосов
/ 29 июня 2018

Некоторые старые кодеры Base64 добавляют возврат каретки "\ r" и / или перевод строки "\ n" для каждых 76 символов в кодированной строке, называемой "чанкинг". Причина для редакторов, которые не могут обрабатывать более длинные строки.

Вопрос в том, что ни "\ r", ни "\ n" не являются одним из базовых символов в кодовой странице base64; не делает ли это всю закодированную строку недопустимой для base64?

Обратите внимание, что я не спрашиваю, будут ли декодеры переносить "пустые" символы типа \ r; Я спрашиваю, почему добавление пустых символов в строку base64 считается нормальным, хотя очевидно, что эти пустые символы отсутствуют в кодовой странице base64.

Спасибо за ваш совет по этому вопросу ...

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Прочитав спецификацию RFC 2045, т. Е. Часть MIME в посте Joop, я понял свое ранее недоразумение: кодовая страница таблицы символов RFC 2045 - не вся история.

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

0 голосов
/ 29 июня 2018

Согласно Base64 javadoc, этот вариант Base64 предназначен для MIME.

Тем не менее, нужно знать область использования.

К счастью, класс Base64 может делать все.

  • Basic

    Использует «Алфавит Base64», как указано в Таблице 1 RFC 4648 и RFC 2045, для операций кодирования и декодирования. Кодировщик не добавляет символ перевода строки (разделитель строк). Декодер отклоняет данные, содержащие символы вне алфавита base64.

  • URL и безопасное имя файла

    Использует URL-адрес и имя файла, безопасный Base64 Alphabet, как указано в таблице 2 RFC 4648 для кодирования и декодирования. Кодировщик не добавляет символ перевода строки (разделитель строк). Декодер отклоняет данные, содержащие символы вне алфавита base64.

  • MIME

    Использует «алфавит Base64», как указано в таблице 1 RFC 2045, для операций кодирования и декодирования. Закодированный вывод должен быть представлен в строках длиной не более 76 символов и использует возврат каретки '\ r', за которым сразу же следует перевод строки \ n в качестве разделителя строк. Разделитель строк не добавляется в конец закодированного вывода. Все разделители строк или другие символы, не найденные в таблице алфавита base64, игнорируются в операции декодирования.

...