java décodage base64 Chaîne


Je me rends compte que c'est probablement plus une question java générale, mais comme il fonctionne dans l'environnement Notes\ Domino, j'ai pensé que je vérifierais d'abord cette communauté.

Résumé:

Je ne semble pas être capable de décoder la chaîne: dABlAHMAdAA= en utilisant lotus.Domino.axe.encodage.Base64 ou soleil.misc.BASE64Decoder

Je sais que le texte original est: test

J'ai confirmé par décodage à http://www5.rptea.com/base64/ il semble que ce soit UTF-16.

Aussi simple test, en utilisant l'un ou l'autre des éléments ci-dessous:

String s_base64 = "dABlAHMAdAA=";
byte[] byte_base64 = null;
String s_decoded = "";

byte_base64 = new sun.misc.BASE64Decoder().decodeBuffer(s_base64);
s_decoded = new String(byte_base64, "UTF-16");
System.out.println("Test1: " + s_decoded);

byte_base64 = lotus.domino.axis.encoding.Base64.decode(s_base64);
s_decoded = new String(byte_base64, "UTF-16");
System.out.println("Test2: " + s_decoded);

System.out.println("========= FINISH.");

J'obtiens la sortie:
Test1:????
Test2:????

Si je crée une chaîne en UTF-8

s_decoded = new String(byte_base64, "UTF-8");

Il sort:
t
aucune erreur n'est lancée, mais elle ne termine pas le code, n'arrive pas à la "FINITION".

Détail

J'accède à un service Web asmx, dans la réponse SOAP, certains nœuds contiennent des données encodées en base64. À ce stade, il n'y a aucun moyen de modifier le service, donc je dois XPath et décoder moi-même. Les données encodées sont du texte ou du html. Si je passe les données codées à travers http://www5.rptea.com/base64 / et sélectionnez UTF-16, il décode correctement, donc je dois faire quelque chose de mal.

En note de côté, j'ai codé "test":

s_base64 = lotus.domino.axis.encoding.Base64.encode(s_text.getBytes());
System.out.println("test1 encodes to: " + s_base64);

s_base64 = new sun.misc.BASE64Encoder().encode(s_text.getBytes());
System.out.println("test2 encodes to: " + s_base64);

Ils encodent tous les deux en:
dDVzdA== ...si vous alimenter 2 décodeurs ci-dessus, comme prévu, décode correctement.

Si je vais sur le site ci-dessus et que j'encode" test " en UTF-16, j'obtiens: dABlAHMAdAA= donc cela confirme que les données sont en UTF-16.

C'est comme si les données étaient de véritables données base64, mais le décodeur ne les reconnaît pas comme telles. Je suis un peu perplexe pour le moment.

Tous les pointeurs ou commentaires seraient reçus avec gratitude.

Author: nick wall, 2013-07-24

2 answers

La chaîne a été codée en UTF-16LE (little-endian), où l'octet le moins significatif est stocké en premier. Java est par défaut big-endian. Vous devez utiliser:

s_decoded = new String(byte_base64, "UTF-16LE");
 11
Author: Joni, 2013-07-24 14:51:47

J'ai utilisé votre exemple "dABlAHMAdAA=" sur mon outil de décodage en ligne base64 et il semble que vous manquiez les fichiers jar Apache base64 Cliquez sur le lien ci-dessous.

Http://www.hosting4free.info/Base64Decode/Base64-Decode.jsp

Le code derrière le site Web est

import org.apache.commons.codec.binary.Base64;

public class base64decode

{

public static void main(String[] args) throws UnsupportedEncodingException 
   {


    byte[] decoded = Base64.decodeBase64("YWJjZGVmZw==".getBytes());
    System.out.println(new String(decoded) + "\n");

}

}
 0
Author: Dharmesh Patel, 2013-08-22 18:09:21