Не удается заставить Base64.decodeBase64 работать (кодек Commons) - PullRequest
2 голосов
/ 14 марта 2011
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 ]

5 голосов
/ 14 марта 2011

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

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

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

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

2 голосов
/ 14 марта 2011

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

...