我试图使用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;
}
错误logcat是:
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等)的错误都是持久的,任何帮助都会被贬低,谢谢。
你试图解码你不能解决的26.919047981500626
。因为它不是有效的base64编码字符串。
当放入this online base64 decoder时,会出现此错误:
输入不是有效的Base-64字符串,因为它包含非基本64个字符,两个以上的填充字符或填充字符中的非法字符。
更新:
如果您想知道编码的base64字符串的有效格式,请查看wikipedia article中的表以及在C#中显示base64验证器代码的this answer。
它击中了我,如果在任何情况下你分裂数据和编码它,然后先解码它然后把它重新组合在一起..愚蠢的我在数据整理后做了解码,留下了我的“坏基础64”编码数据块有文件enders(==)。
无论如何,这是Linkis方便验证编码和解码。
删除前缀字符串“data:image / png; base64”,得到“data:image / png; base64”之后的字符串,它可以解码