base64加密出現的\r\n換行問題,導致在與對接方對接時,字符串長會簽名出錯。
原來是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 ”。
問題根源就是回車換行符,那刪除就行了,谷歌後又發現一問題,原來“回車換行符(\r\n)”是在Windows纔有,而Linux只有換行(\n),Mac只有回車(\r)。
再搜索了一下找到了解決辦法,調用字符串對象的replaceAll方法替換掉\r和\n,代碼如下:
字符串對象.replaceAll("\r|\n", "");
這樣就兼容了不同平臺。
完
參考資料:
Base64換行問題資料
---------------------
作者:小雞也瘋狂
來源:CSDN
原文:https://blog.csdn.net/jifengwan/article/details/45460695
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!