Android 开发 Base64 问题:java.lang.IllegalArgumentException: Illegal base64 character 3a
Android 开发 Base64 问题:java.lang.IllegalArgumentException: Illegal base64 character 3a
·
public static Bitmap base64StrToBitmap(String base64Str) {
if (base64Str == null || base64Str.isEmpty()) return null;
java.util.Base64.Decoder decoder = Base64.getDecoder();
byte[] decodedBytes = decoder.decode(base64Str);
return BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);
}
- 在 Android 开发中,执行上述代码,传如有效的 Base64 字符串
data:image/png;base64,iVBORw0KGg...,报如下错误
Caused by: java.lang.IllegalArgumentException: Illegal base64 character 3a
问题原因
-
3a是字符:的 ASCII 码,出现在 Base64 字符串的data:image/png;base64,这部分前缀中 -
decoder.decode方法只能解析纯 Base64 部分的数据,即逗号(,)之后的内容
处理策略
- 在解码前,先检查并移除 Base64 字符串的前缀
public static Bitmap base64StrToBitmap(String base64Str) {
if (base64Str == null || base64Str.isEmpty()) return null;
if (base64Str.contains(",")) {
base64Str = base64Str.split(",")[1];
}
java.util.Base64.Decoder decoder = Base64.getDecoder();
byte[] decodedBytes = decoder.decode(base64Str);
return BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);
}
问题观察
- 问题复现:传入带前缀的 Base64 字符串,程序报错
String base64Str = "data:image/png;base64,iVBORw0KGg...";
java.util.Base64.Decoder decoder = Base64.getDecoder();
byte[] decodedBytes = decoder.decode(base64Str);
Log.i(TAG, "decodedBytes length: " + decodedBytes.length);
Bitmap bitmap = BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);
Log.i(TAG, "bitmap: " + bitmap);
# 输出结果
Caused by: java.lang.IllegalArgumentException: Illegal base64 character 3a
- 问题处理:传入不带前缀的 Base64 部分的字符串,程序正常运行
String base64Str = "iVBORw0KGg...";
java.util.Base64.Decoder decoder = Base64.getDecoder();
byte[] decodedBytes = decoder.decode(base64Str);
Log.i(TAG, "decodedBytes length: " + decodedBytes.length);
Bitmap bitmap = BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);
Log.i(TAG, "bitmap: " + bitmap);
# 输出结果
decodedBytes length: 36251
bitmap: android.graphics.Bitmap@9a78bbe
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)