Android Base64 декодирование для Android 2.1 - PullRequest
2 голосов
/ 07 сентября 2011

Я создаю приложение с API Level 7 (Android 2.1), и мне нужно декодировать полученную сервером строку, которая закодирована с Base64. Я знаю, что библиотека Base64 включена в Android 2.2, поэтому я включаю ее исходный код прямо в свой проект. Вы можете найти исходный код здесь: Base64 .

Так что моя проблема в том, что когда я пытаюсь декодировать строку, base64 возвращает это: BASE 64 : [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);

Есть предложения, как это исправить?

Ответы [ 2 ]

12 голосов
/ 07 сентября 2011

Ваша проблема не имеет ничего общего с Base64.

Класс Base64 правильно возвращает byte[], который содержит данные.Вы звоните toString() на этот byte[], который не использует содержимое из byte[], но только его identityHashCode().

То, что вы хотите сделать вместо этого, это преобразовать ваш byte[] в String, указав правильную кодировку:

byte[] bytes = Base64.decode(data, Base64.DEFAULT);
String string = new String(bytes, "UTF-8");
0 голосов
/ 07 сентября 2011

Вы читали, как им пользоваться? Он находится в верхней части страницы, на которую вы ссылались, вы не могли ее пропустить. Не по телефону toString().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...