Android图片转Base64写入JSON后转义异常,无法解码求助
解决Base64图片编码写入JSON后无法解码的问题
我来帮你搞定这个问题!你遇到的两个现象——/被转义成\/、出现\n换行,其实都是有原因的,咱们一步步解决:
问题根源拆解
- 换行符
\n的由来:你用了Base64.DEFAULT编码模式,这个模式会自动在每76个字符后添加换行符,目的是让长字符串更易读,但这些换行符写入JSON后就变成了\n,直接破坏了Base64的结构,导致解码失败。 /被转义成\/:这其实是JSON的正常语法规则,JSON会对部分特殊字符做转义处理。你直接从JSON文本里复制字符串解码肯定会失败,但如果用JSON解析库读取这个字段,解析器会自动把\/还原成/,完全不影响使用。
具体解决方案
第一步:替换Base64编码模式
把编码时的Base64.DEFAULT改成Base64.NO_WRAP,这个模式不会添加任何换行符,生成的是纯净的连续Base64字符串。
修改你的代码:
// 原代码 // imageString2 = Base64.encodeToString(imageBytes2, Base64.DEFAULT); // 修改后 imageString2 = Base64.encodeToString(imageBytes2, Base64.NO_WRAP);
同样的,imageString1的编码也要做相同修改哦。
第二步:正确读取JSON中的Base64字符串
当你需要从JSON里提取Base64字符串解码时,一定要用JSON解析工具(比如你代码里的JSONObject)来获取字段值,而不是直接复制JSON文本里的内容。举个例子:
// 假设你拿到了返回的response JSONObject String base64Str = response.getString("im1"); // 这里得到的base64Str已经自动处理了转义,直接解码即可 byte[] imageBytes = Base64.decode(base64Str, Base64.NO_WRAP); Bitmap bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
这样处理后,生成的Base64字符串写入JSON后,既能避免换行符干扰,转义的\/也会被解析器自动还原,就能正常解码出图片啦!
内容的提问来源于stack exchange,提问作者Athanas
相关产品推荐
相关产品推荐

