Входной массив байтов имеет неправильный конечный байт в 40

у меня есть строка в кодировке base64. Выглядит это так:

eyJibGExIjoiYmxhMSIsImJsYTIiOiJibGEyIn0=

любой онлайн-инструмент может декодировать это в соответствующую строку, которая {"bla1":"bla1","bla2":"bla2"}. Однако моя реализация Java терпит неудачу:

import java.util.Base64;
System.out.println("payload = " + payload);
String json = new String(Base64.getDecoder().decode(payload));

Я получаю следующую ошибку:

payload = eyJibGExIjoiYmxhMSIsImJsYTIiOiJibGEyIn0=
java.lang.IllegalArgumentException: Input byte array has incorrect ending byte at 40

что не так с моим кодом?

2 ответов


хорошо, я узнал. Исходная строка кодируется на устройстве Android с помощью android.util.Base64 by Base64.encodeToString(json.getBytes("UTF-8"), Base64.DEFAULT);. Он использует android.util.Base64.DEFAULT схемы кодирования.

затем на стороне сервера при использовании java.util.Base64 это должно быть расшифровано с Base64.getMimeDecoder().decode(payload) не С Base64.getDecoder().decode(payload)


Я пытался использовать строки из args. Я обнаружил, что если я использую arg[0].trim() что это сработало. например!--3-->

Base64.getDecoder().decode(arg[0].trim());

Я думаю, что есть какой-то пробел, который все испортил.