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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top