Не удается заставить 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)
,