Не удается заставить Base64.decodeBase64 работать (кодек Commons)

String encode = Base64.encodeBase64String("Hello".getBytes());
System.out.println(encode);
byte[] decode = Base64.decodeBase64(encode);
System.out.println(decode.toString());

Я не могу сказать, что здесь не так. Я перепробовал все возможные комбинации. Установите кодировку toString, но не toString. Кодирование работает отлично. Я могу выбросить это число в веб-декодер и каждый раз получать правильное значение. Просто не могу заставить это работать.

Выход:

 run:
SGVsbG8= (encode)

[B@1fb8ee3  (decode)

Я могу заставить его работать, если я использую цикл for и вручную добавляю символы в строку. Но я думал, что Струна сделала это для меня?

2 ответа

Решение

Непосредственная проблема заключается в том, как вы преобразуете байтовый массив в строку.

Попробуйте это вместо этого:

System.out.println(new String(decode));

Тем не менее, как правило, плохая идея использовать перегрузки String.getBytes() или же new String(byte[]) которые не определяют кодировку символов. Они используют кодировку платформы по умолчанию, что сразу означает, что ваш код не является переносимым - или, по крайней мере, ваши данные - нет. Я предлагаю вам использовать обычную кодировку, такую ​​как UTF-8.

toString() на массиве не делает то, что вы ожидаете... это просто по умолчанию toString() реализация от Object, который возвращает строку на основе хэш-кода объекта. Пытаться new String(decode),

Другие вопросы по тегам