No se puede obtener Base64.DecodeBase64 para que funcione (commons Codec)
-
22-10-2019 - |
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í?
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)
.