2016-02-09 5 views
5

Ich habe eine Zeichenfolge, die Base64 codiert ist. Es sieht wie folgt aus:Base64: Eingabe Byte-Array hat falsche End-Byte bei 40

eyJibGExIjoiYmxhMSIsImJsYTIiOiJibGEyIn0= 

Alle Online-Tool, das auf die richtige Zeichenfolge entschlüsseln kann, die {"bla1":"bla1","bla2":"bla2"} ist. Aber meine Java-Implementierung fehlschlägt:

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

ich die folgende Fehlermeldung erhalten:

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

Was mit meinem Code ist falsch?

+0

[Kann nicht reproduziert werden] (http://ideone.com/z07TWN), ein zusätzliches Zeichen am Ende der Zeichenfolge würde genau diese Ausnahme auslösen ... –

+0

Aber woher bekommen Sie die codierte Zeichenfolge? wie übergibst du es an die Payload-Variable ?, weil, wie du sagst, es funktioniert ... Ich habe es gerade mit Java 8 getestet und keine Probleme. –

Antwort

8

Okay, ich habe es herausgefunden. Der ursprüngliche String wird auf einem Android-Gerät mit android.util.Base64 von Base64.encodeToString(json.getBytes("UTF-8"), Base64.DEFAULT); codiert. Es verwendet android.util.Base64.DEFAULT Kodierungsschema.

Dann auf der Server-Seite bei der Verwendung von java.util.Base64 dies mit Base64.getMimeDecoder().decode(payload)nicht mit Base64.getDecoder().decode(payload)

+0

Es hat für mich funktioniert, danke. –

0

ich decodiert werden versuche die Saiten von dem args zu verwenden. Ich fand, dass, wenn ich arg[0].trim() verwende, dass es es funktionierte. zB

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

Ich denke, es gibt eine Art von Leerzeichen, die es vermasselt.