Не могу получить base64.decodebase64 для работы (Commons Codec)

StackOverflow https://stackoverflow.com/questions/5301339

Вопрос

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

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

Выход:

 run:
SGVsbG8= (encode)

[B@1fb8ee3  (decode)

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top