Impossible d'obtenir Base64.decodeBase64 au travail (Commons codec)
-
22-10-2019 - |
Question
String encode = Base64.encodeBase64String("Hello".getBytes());
System.out.println(encode);
byte[] decode = Base64.decodeBase64(encode);
System.out.println(decode.toString());
Je ne peux pas dire ce qui est erroné ici. J'ai essayé toutes les combinaisons possibles il y a. Réglez le charset, toString, pas toString. Le encode fonctionne parfaitement. Je peux jeter ce numéro dans un décodeur web et obtenir la valeur à chaque fois. Tout ne peut pas obtenir ce travail.
Sortie:
run:
SGVsbG8= (encode)
[B@1fb8ee3 (decode)
Je peux le faire fonctionner si j'utilise une boucle et ajouter manuellement les caractères à une chaîne. Mais je pensais que toString a fait ça pour moi?
La solution
Le problème immédiat est de savoir comment vous convertissez le tableau d'octets à une chaîne.
Essayez ceci:
System.out.println(new String(decode));
Cependant , il est généralement une mauvaise idée d'utiliser les surcharges de String.getBytes()
ou new String(byte[])
qui ne spécifient pas un codage de caractères. Ils utilisent l'encodage par défaut de la plate-forme, ce qui signifie immédiatement votre code n'est pas portable - ou du moins, vos données ne sont pas. Je vous suggère d'utiliser une commune de codage comme UTF-8.
Autres conseils
toString()
sur un tableau ne fait pas ce que vous attendez ... c'est juste la mise en œuvre de toString()
par défaut à partir Object
, qui renvoie une chaîne sur la base hashcode de l'objet. Essayez new String(decode)
.