Non può ottenere Base64.decodeBase64 al lavoro (Commons codec)
-
22-10-2019 - |
Domanda
String encode = Base64.encodeBase64String("Hello".getBytes());
System.out.println(encode);
byte[] decode = Base64.decodeBase64(encode);
System.out.println(decode.toString());
Non posso dire che cosa è sbagliato qui. Ho provato ogni possibile combinazione che ci sia. Impostare il set di caratteri, toString, non toString. La codifica funziona perfettamente. Posso buttare quel numero in un decoder web e ottenere il giusto valore ogni volta. Basta non può ottenere questo al lavoro.
Output:
run:
SGVsbG8= (encode)
[B@1fb8ee3 (decode)
posso farlo funzionare se uso un ciclo for e aggiungere manualmente i caratteri di una stringa. Ma ho pensato toString ha fatto per me?
Soluzione
Il problema immediato è come si sta convertendo l'array di byte in una stringa.
Prova questo, invece:
System.out.println(new String(decode));
Tuttavia , è generalmente una cattiva idea quella di utilizzare i sovraccarichi di String.getBytes()
o new String(byte[])
che non specificano una codifica dei caratteri. Usano la codifica piattaforma predefinita, il che significa che immediatamente il codice non è portatile - o per lo meno, i dati non sono. Vi suggerisco di utilizzare un comune codifica come UTF-8.
Altri suggerimenti
toString()
su un array di non fare ciò che ci si aspetta ... è solo l'implementazione di default toString()
da Object
, che restituisce una stringa in base al codice hash dell'oggetto. Prova new String(decode)
.