Base64編碼出現換行符


概述

Base64是一種字符串編碼格式,Base64采用A-Z a-z 0-9 “+“ “/“這一共64個字符來編碼原始字符(還有墊字符“=“)。一個字符本身是1個字節,也就是8位,而Base64編碼后的一個字符只能表示能表示6位的信息。也就是原始字符串中3字節的信息編碼會變成4字節的信息。Base64的主要作用是滿足MIME傳輸需求,在傳輸過程中都是用ASCII支持的可見字符。Base64是基於字節的編碼,所以不同字符集下的相同字符在Base64下可能有着不同編碼

問題描述

在進過Base64編碼后的字符串無法解碼,解碼時提示RuntimeError
將編碼后的字符串輸出后發現字符串中存在換行符

測試程序

import it.sauronsoftware.base64.Base64;

public class TestBase64 {
public static void main(String[] args){
String message = "{\"begin_time\":\"2016-09-13T19:06:00+08:00\",\"end_time\":\"2016-10-29T19:06:00+08:00\",\"name\":\"testExam\",\"score\":[{\"score\":\"0\",\"qid\":\"1\"}],\"questions\":[{\"name\":\"A+B\",\"qid\":\"1\"}],\"eid\":\"1\"}";
System.out.println(Base64.encode(message));

    }
程序輸出

eyJiZWdpbl90aW1lIjoiMjAxNi0wOS0xM1QxOTowNjowMCswODowMCIsImVuZF90aW1lIjoiMjAx
Ni0xMC0yOVQxOTowNjowMCswODowMCIsIm5hbWUiOiJ0ZXN0RXhhbSIsInNjb3JlIjpbeyJzY29y
ZSI6IjAiLCJxaWQiOiIxIn1dLCJxdWVzdGlvbnMiOlt7Im5hbWUiOiJBK0IiLCJxaWQiOiIxIn1d
LCJlaWQiOiIxIn0=
觀察測試結果

base64編碼后出現了換行符
如果去除換行符 字符串能正常解碼
原因分析

根據RFC822規定,BASE64Encoder編碼每76個字符,還需要加上一個回車換行
部分Base64編碼的java庫還按照這個標准實行

解決方案

換用Apache的 commons-codec.jar, Base64.encodeBase64String(byte[])得到的編碼字符串是不帶換行符的

參考

https://segmentfault.com/q/1010000000094848
http://blog.csdn.net/uucai/article/details/45871833
原文鏈接:https://blog.csdn.net/u010953266/java/article/details/52590570


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM