入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

为什么Base64编码有回车换行符

创建时间:2015-05-03 投稿人: 浏览次数:6067

难得5.1在家休息,记录最近开发接口遇到的一个问题。

公司要求用终端发布文章的时,将文章的参数放入JSON对象,再转成字符串发给后台,后台把字符串解析成JSON对象,最后存储。

如果需要上传附件,将附件转成字节流,再用Base64编码,最后和文章参数一起放入JSON对象。


问题:如果上传附件,后台将字符串解析成JSON对象时出现如下异常:

net.sf.json.JSONException: Unterminated string

有博客说,字符串中有回车换行符,导致JSON格式不符合要求。

用debug查看JSON字符串确实有回车换行符:



谷歌了一下,原来是RFC2045中有规定:

The encoded output stream must be represented in lines of no more than 76 characters each.

Base64一行不能超过76字符,超过则添加回车换行符。

结合前面博客说的“有回车符,导致JSON格式不符合要求”,那就明白了,对附件进行Base64编码,因为超过76字节,所以要添加回车换行符,后台解析带有回车换行符的JSON字符串就出现“ net.sf.json.JSONException : Unterminated string ”。

问题根源就是回车换行符,那删除就行了,谷歌后又发现一问题,原来“回车换行符( )”是在Windows才有,而Linux只有换行( ),Mac只有回车( )。

再搜索了一下找到了解决办法,调用字符串对象的replaceAll方法替换掉 和 ,代码如下:

字符串对象.replaceAll(" | ", "");

这样就兼容了不同平台。



参考资料:

Base64换行问题资料

http://segmentfault.com/q/1010000000094848

http://bbs.csdn.net/topics/40109783

http://www.360doc.com/content/07/1010/09/41237_800415.shtml

http://ksgimi.iteye.com/blog/1608721

http://staratsky.iteye.com/blog/314651

回车换行符( )资料

http://blog.csdn.net/y13530828499/article/details/6718206

http://www.linuxidc.com/linux/2011-03/33411.htm

http://www.cnblogs.com/clarkchen/archive/2011/06/02/2068609.html

http://www.cnblogs.com/faraway/archive/2009/03/05/1403649.html

http://www.cnblogs.com/jacktu/archive/2008/06/12/1218400.html

RFC-0822:https://www.ietf.org/rfc/rfc0822.txt

RFC-1421:https://www.ietf.org/rfc/rfc1421.txt

RFC-2045:https://www.ietf.org/rfc/rfc2045.txt

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。