Не могу получить base64.decodebase64 для работы (Commons Codec)
-
22-10-2019 - |
Вопрос
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)
.