开发者

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜