Java Android 2.1的Android Base64解码
我正在构建一个API级别为7(Android 2.1)的应用程序,我需要解码服务器接收的字符串,该字符串用Base64编码。我知道Base64库包含在Android2.2中,这就是为什么我在我的项目中直接包含它的源代码。您可以在此处找到源代码: 因此,我的问题是,当我尝试解码字符串时,base64返回以下内容:Java Android 2.1的Android Base64解码,java,android,base64,Java,Android,Base64,我正在构建一个API级别为7(Android 2.1)的应用程序,我需要解码服务器接收的字符串,该字符串用Base64编码。我知道Base64库包含在Android2.2中,这就是为什么我在我的项目中直接包含它的源代码。您可以在此处找到源代码: 因此,我的问题是,当我尝试解码字符串时,base64返回以下内容:base64:[B@46392d10 如果我在在线base64解码器上运行服务器发送给我的代码,我会得到以下信息:le:“en_US”,“id”:2,“error_code”:6003,“
base64:[B@46392d10
如果我在在线base64解码器上运行服务器发送给我的代码,我会得到以下信息:le:“en_US”,“id”:2,“error_code”:6003,“error_string:“Unsupported Client Version”}
以下是我正在使用的代码:
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("Response ","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);
有什么建议吗?你读过如何使用它吗?它在你链接的页面顶部,你不可能错过它:)
decode()
返回一个字节数组,你需要将它转换成字符串
。不要通过调用toString()
你的问题与Base64
无关
Base64
类正确返回一个包含数据的byte[]
。您可以对该byte[]
调用toString()
,它不使用byte[]
的内容,而只使用它的identityHashCode()
您要做的是通过提供正确的编码将字节[]
转换为字符串
:
byte[] bytes = Base64.decode(data, Base64.DEFAULT);
String string = new String(bytes, "UTF-8");
上面的链接已断开。它似乎已被移动。感谢您的评论!我希望这对其他人有所帮助:)小心,我在移动应用程序中使用了Base64代码对图像进行编码,在服务器上解码图像时遇到了一些问题,我不得不转到Android 2.2