java.lang.IllegalArgumentException: плохой base-64

1

Я пытаюсь кодировать и декодировать String с помощью android.util.Base64, но он дает плохую ошибку base-64.

Код с проблемой:

private byte[] base64ToByte(String str) throws IOException {

    Log.i("encription", str);
    byte[] returnbyteArray = Base64.decode(str, Base64.URL_SAFE);



    return returnbyteArray;
}

Лог-код ошибки:

08-09 13:02:18.589: E/AndroidRuntime(29827): Process: com.example.maptest, PID: 29827
08-09 13:02:18.589: E/AndroidRuntime(29827): java.lang.IllegalArgumentException: bad base-64
08-09 13:02:18.589: E/AndroidRuntime(29827):    at android.util.Base64.decode(Base64.java:161)
08-09 13:02:18.589: E/AndroidRuntime(29827):    at android.util.Base64.decode(Base64.java:136)
08-09 13:02:18.589: E/AndroidRuntime(29827):    at android.util.Base64.decode(Base64.java:118)
08-09 13:02:18.589: E/AndroidRuntime(29827):    at com.example.maptest.security.Encription.base64ToByte(Encription.java:116)
08-09 13:02:18.589: E/AndroidRuntime(29827):    at com.example.maptest.security.Encription.encode(Encription.java:103)
08-09 13:02:18.589: E/AndroidRuntime(29827):    at android.os.Handler.dispatchMessage(Handler.java:102)
08-09 13:02:18.589: E/AndroidRuntime(29827):    at android.os.Looper.loop(Looper.java:136)
08-09 13:02:18.589: E/AndroidRuntime(29827):    at android.app.ActivityThread.main(ActivityThread.java:5081)
08-09 13:02:18.589: E/AndroidRuntime(29827):    at java.lang.reflect.Method.invokeNative(Native Method)
08-09 13:02:18.589: E/AndroidRuntime(29827):    at java.lang.reflect.Method.invoke(Method.java:515)
08-09 13:02:18.589: E/AndroidRuntime(29827):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:781)
08-09 13:02:18.589: E/AndroidRuntime(29827):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-09 13:02:18.589: E/AndroidRuntime(29827):    at dalvik.system.NativeStart.main(Native Method)

Ввод (str String из кода) выглядит следующим образом:

08-09 13:02:18.539: I/encription(29827): 26.919047981500626

Это двойное преобразование в строку, используя:

String.valueOf(number)

Ошибка сохраняется со всеми флагами кодирования (DEFAULT, NO_WRAP и т.д.), любая помощь будет оценена, спасибо.

  • 0
    Можете ли вы опубликовать значение String?
  • 0
    Попробуйте перейти на Base64.NO_WRAP
Показать ещё 1 комментарий
Теги:
base64
illegalargumentexception
encoding

2 ответа

4
Лучший ответ

Вы пытаетесь декодировать 26.919047981500626, который вы не можете. Потому что это не допустимая строка в кодировке base64.

Когда он помещается в этот онлайн-декодер base64, он дает эту ошибку:

Ввод не является допустимой строкой Base-64, так как содержит не базовый 64 символ, более двух отступов или недопустимый символ среди прописных символов.

Update:

Если вы хотите узнать правильное форматирование закодированной строки base64, взгляните на таблицу в статью в википедии, а также этот ответ, который показывает код проверки подлинности base64 в С#.

  • 0
    Хорошо, я понимаю, но почему это не допустимая строка Base64? и если нет, что я могу использовать вместо этого, чтобы решить эту проблему?
  • 0
    Смотрите мое обновление. Но я все еще не понимаю, чего вы здесь добиваетесь ... Если вы хотите правильную строку в кодировке Base64, просто поместите произвольную строку на этом сайте, чтобы кодировать ее для вас.
0

Это ударило меня, если в любом случае вы раскалываете данные и кодировку, а затем сначала декодируете их, прежде чем снова их связывать. Глупо, я делал декодирование после сортировки данных, которые оставили меня "bad-base-64" поскольку каждый блок данных кодирования имел концевые файлы (==).

Это Ссылка удобна в любом случае для проверки кодировки и декодирования.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню