2013-03-01 17 views
10

Mam do odkodowania danych zakodowanych base64 otrzymanych od serwera php.kodowanie/dekodowanie danych między php/java dla Androida

Serwer używa "base64_encode" do kodowania danych.

W mojej aplikacji na Androida używam klasy android.utils.Base64 do dekodowania.

oryginalny zaszyfrowane dane = "† + U] M (‡ = Nie" dane

kodowania base64 w php daje ...... - "hisP3F1NBCgIAocQCD3x9g =="
kodowania danych base64 w Android daje - „4oCgKw/DnF1NBCgIAuKAoRAIPcOxw7Y =”

Jak widać, Java zakodowany ciąg jest dłuższa niż php zakodowany. Proszę podać swoje cenne sugestie. muszę znaleźć swoje domyślne formaty kodowania.

Jak uzyskać ten sam zakodowany ciąg z obu.?

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() zależy od kodowania locale. najprawdopodobniej utf-8 w twoim przypadku. w php będzie zależeć od serwera, prawdopodobnie o 8-bitowym kodowaniu o stałym rozmiarze. bajty, które podasz twojemu koderowi base64, są różne. – njzk2

+0

@ userSeven7s: dane wyjściowe z PHP są oparte na CP1252, dane wyjściowe z JAVA oparte są na UTF-8, zaktualizuję moją odpowiedź poniżej – Shehabix

Odpowiedz

11

Spróbuj to w Javie: To daje długą wersję napisu (UTF-8)

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

Aktualizacja:

Wypróbuj w Javie: To da ci krótką wersję ciągu (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"); 

Ewentualnie spróbuj tego skryptu PHP:

pliku: 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

Dzięki stary .. To była wielka pomoc .. Doceń to. "CP1252" załatwił sprawę. Byłem wyszukiwarką google od odpowiedzi. – Ronnie

+0

jak mogę dekodować ten '// To powinno dać takie same wyniki jak w PHP bajt [] encoded = Base64.encode (encrypted.getBytes (" CP1252 "), Base64.DEFAULT); String str = new String (zakodowany, "CP1252"); ' – Anirban