2013-03-01 5 views
10

Je dois décoder une donnée codée en base64 reçue d'un serveur php.codage/décodage des données entre php/java pour android

Le serveur utilise 'base64_encode' pour coder les données.

Dans mon application Android, j'utilise la classe android.utils.Base64 pour faire le décodage.

données chiffrées d'origine = "† + Ü] M (‡ = Nô"

Base64 données en php donne ...... - "hisP3F1NBCgIAocQCD3x9g =="
données d'encodage base64 dans Android donne - « 4oCgKw/DnF1NBCgIAuKAoRAIPcOxw7Y = »

Comme vous pouvez le voir, la chaîne codée java est plus long que le php codé. S'il vous plaît donner vos suggestions précieuses. Je dois trouver leurs formats d'encodage par défaut.

Comment obtenir le même chaîne codée des deux.?

java/code android:

String encrypted = "†+Ü]M(‡=ñö"; 
byte[] encoded = Base64.encode(encrypted.getBytes(), Base64.DEFAULT); 
String str = new String(encoded); //str = "4oCgKw/DnF1NBCgIAuKAoRAIPcOxw7Y=" 
+1

encrypted.getBytes() dépend de l'encodage des paramètres régionaux. très probablement utf-8 dans votre cas. en php, cela dépendra du serveur, probablement un encodage 8 bits de taille fixe. les octets que vous donnez à votre encodeur base64 sont différents. – njzk2

+0

@ userSeven7s: la sortie du PHP est basée sur CP1252, la sortie de JAVA est basée sur UTF-8, je vais mettre à jour ma réponse ci-dessous – Shehabix

Répondre

11

Essayez ceci en Java: Cela vous donnera la version longue de la chaîne (UTF-8)

byte[] encoded = Base64.encode(encrypted.getBytes("UTF-8"), Base64.DEFAULT); 
String str = new String(encoded, "UTF-8"); 

Mise à jour:

Essayez ceci en Java: Cela vous donnera la version courte de la chaîne (CP1252)

// This should give the same results as in PHP 
byte[] encoded = Base64.encode(encrypted.getBytes("CP1252"), Base64.DEFAULT); 
String str = new String(encoded, "CP1252"); 

Vous pouvez également essayer ce script PHP:

fichier: test.php

<?php 

echo base64_encode($_GET['str'])." Default UTF-8 version<br />"; 
echo base64_encode(iconv("UTF-8","CP1252",$_GET['str']))." CP1252 Version <br />"; 

?> 

usage: http://[SOMEDOMAIN]/test.php?str=†+Ü]M(‡=ñö 
+1

Merci mec .. Ce fut une grande aide .. Appréciez-le. "CP1252" a fait l'affaire. J'étais une recherche google loin de la réponse. – Ronnie

+0

comment puis-je le décoder? // Cela devrait donner les mêmes résultats que dans PHP byte [] encoded = Base64.encode (encrypted.getBytes ("CP1252"), Base64.DEFAULT); Chaîne str = new Chaîne (codée, "CP1252"); ' – Anirban

Questions connexes