Android Base64 decoding for Android 2.1
I'm building an application with API Level 7 (Android 2.1) and I need to decode a string received by server,which is encoded with Base64. I know that Base64 library is included in Android 2.2, that's why I include the source code of it directly in my project. You can find the source code here: Base64.
So my problem is that when I try to decode a string the base64 returns this: BASE 64 : [B@46392d10
.
If I run the code that server send me on online base64 decoder I get this: le":"en_US","id":2,"error_code":6003,"error_string":"Unsupported Client Version"}
Here is the code that I'm using :
HttpResponse response = httpclient.execute(httppost);
Log.v("Response ","Status line : "+ response.getStatusLine().toString());
String responseBody = EntityUtils.toString(response.getEntity()); //response
Log.v("Response ","Response : "+ responseBody);
String objectIdentificator = responseBody.substring(0,32);
Log.v("Response ","Object Identificator (LONGINT) : "+ objectIdentificator);
String type = responseBody.substring(33,36);
Log.v("Response ","TYPE (UNSIGNED BYTE) : "+ type);
String operation = responseBody.substring(37,40);
Log.v("Response ","OPERATION (UNSIGNED BYTE) : "+ operation);
String objectId = responseBody.substring(41, 73);
Log.v("Response ","UID (CHAR, length 32) : "+ objectId);
String id = responseBody.substring(74, 106);
Log.v("Response ","ID (LONGINT) : "+ id);
String size = responseBody.substring(107,139);
Log.v("Response ","Data Size (LONGINT) : "+ size);
String hash = responseBody.substring(140,172);
Log.v("Response ","Data Hash (CHAR, length 32 : "+ hash);
String dType = responseBody.substring(173,176);
Log.v("R开发者_开发百科esponse ","Data Type (UNSIGNED BYTE) : "+ dType);
String data = responseBody.substring(177, responseBody.length());
Log.v("Response ","Data (CHAR, any length, in BASE64) : "+ data);
String first = Base64.decode(data, Base64.DEFAULT).toString();
Log.v("Response ","BASE 64 : "+ first);
Any suggestions how to fix that?
Your problem has nothing to do with Base64
.
The Base64
class correctly returns a byte[]
that contains the data. You call toString()
on that byte[]
which does not use the content of the byte[]
but only its identityHashCode()
.
What you want to do instead is convert your byte[]
into a String
by giving the correct encoding:
byte[] bytes = Base64.decode(data, Base64.DEFAULT);
String string = new String(bytes, "UTF-8");
Did you read how to use it? It's at the top of the page you linked, you couldn't have missed it :) decode()
returns a byte array, you need to convert that to String
. Not by calling toString()
.
精彩评论