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?

È stato utile?

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top