Base64编码值存入JSONObject后出现多余换行符问题排查
问题:Base64编码后存入JSONObject,值末尾多出
\n换行符 我有一个字符串:
3e8c837f-907e-46dd-9f71-697ccbb065d6
用以下代码进行Base64编码:
Base64.encodeToString(this.toByteArray(Charsets.UTF_8), Base64.DEFAULT)
编码输出为:
M2U4YzgzN2YtOTA3ZS00NmRkLTlmNzEtNjk3Y2NiYjA2NWQ2
看起来一切正常,但将编码后的字符串存入JSONObject时:
val json = JSONObject() json.put("id", encodedId)
最终发送的JSON中id值变成了:
"id":"M2U4YzgzN2YtOTA3ZS00NmRkLTlmNzEtNjk3Y2NiYjA2NWQ2\n"
末尾多了一个\n,请问这是什么原因导致的?
原因与解决方法
原因
你使用的Base64.DEFAULT编码参数遵循RFC 2045规范,会自动在编码后的字符串末尾添加换行符(\n),目的是限制每行最多76个字符。虽然你单独查看编码结果时可能看不到这个换行符,但它实际上已经存在于字符串中,当存入JSONObject并序列化后,这个隐藏的换行符就被显式展示出来了。
解决方法
将编码参数替换为Base64.NO_WRAP,这个参数会禁用自动添加换行符的行为,确保编码结果末尾不会出现多余的\n。
修改后的代码示例:
val originalId = "3e8c837f-907e-46dd-9f71-697ccbb065d6" val encodedId = Base64.encodeToString(originalId.toByteArray(Charsets.UTF_8), Base64.NO_WRAP) val json = JSONObject() json.put("id", encodedId)
内容的提问来源于stack exchange,提问作者Wafi_ck
相关产品推荐
相关产品推荐

