Входной массив байтов имеет неправильный конечный байт в 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());
Я думаю, что есть какой-то пробел, который все испортил.