Pregunta

String encode = Base64.encodeBase64String("Hello".getBytes());
System.out.println(encode);
byte[] decode = Base64.decodeBase64(encode);
System.out.println(decode.toString());

No puedo decir qué pasa aquí. He probado todas las combinaciones posibles que hay. Establezca el charset, toString, sin toString. El codificador funciona perfectamente. Puedo arrojar ese número a un decodificador web y obtener el valor correcto cada vez. Simplemente no puedo hacer que esto funcione.

Producción:

 run:
SGVsbG8= (encode)

[B@1fb8ee3  (decode)

Puedo hacer que funcione si uso un bucle for y agrego manualmente los caracteres a una cadena. ¿Pero pensé que ToString hizo eso por mí?

¿Fue útil?

Solución

El problema inmediato es cómo está convirtiendo la matriz de bytes en una cadena.

Prueba esto en su lugar:

System.out.println(new String(decode));

Sin embargo, generalmente es una mala idea usar las sobrecargas de String.getBytes() o new String(byte[]) que no especifican una codificación de personajes. Utilizan la codificación predeterminada de la plataforma, lo que significa inmediatamente que su código no es portátil, o al menos, sus datos no lo son. Le sugiero que use una codificación común como UTF-8.

Otros consejos

toString() en una matriz no hace lo que esperas ... es solo el valor predeterminado toString() implementación de Object, que devuelve una cadena basada en el húsico del objeto. Probar new String(decode).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top