Java中Base64编解码丢失JSON特殊字符问题求助
问题根源与解决方案
嘿,我一眼就瞅出问题所在了——你完全搞反了Base64的编解码顺序!
你的代码里第一步就对原始JSON字符串"{\"name\":\"ABC\"}"执行了Base64解码操作,但这个原始JSON本身根本不是Base64编码后的内容啊!Base64只认特定的64个字符(A-Z、a-z、0-9、+、/,还有填充用的=),像{、"这些字符不在Base64的有效字符范围内,解码时会被直接忽略,这就是为啥解码再编码后只剩nameABC的原因。
正确的编解码流程
- 编码(JSON → Base64字符串):先把JSON字符串转成字节数组,再用Base64编码成字符串
- 解码(Base64字符串 → JSON):把Base64字符串解码成字节数组,再转回JSON字符串
修正后的代码示例
// 原始JSON字符串 String originalJson = "{\"name\":\"ABC\"}"; // 编码步骤:JSON → Base64字符串 byte[] jsonBytes = originalJson.getBytes(StandardCharsets.UTF_8); String base64Encoded = android.util.Base64.encodeToString(jsonBytes, Base64.NO_WRAP); // 解码步骤:Base64字符串 → 原始JSON byte[] decodedBytes = android.util.Base64.decode(base64Encoded, Base64.NO_WRAP); String decodedJson = new String(decodedBytes, StandardCharsets.UTF_8); // 输出验证 System.out.println("编码后的Base64字符串:" + base64Encoded); System.out.println("解码后的原始JSON:" + decodedJson);
关键注意点
- 一定要指定字符集(比如
UTF_8),避免不同环境下的字符编码差异导致乱码 - 严格遵循“先编码再解码”的顺序,别搞反啦!
内容的提问来源于stack exchange,提问作者Ssdevapp
相关产品推荐
相关产品推荐

