zoukankan      html  css  js  c++  java
  • 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

    缘于生活,而归于工作。本人所书,而意于分享。 如有转载,请注明出处! --活出自己范儿
  • 相关阅读:
    通过三个DEMO学会SignalR的三种实现方式
    [Asp.net]SignalR实现实时日志监控
    SignalR -- server push 利器
    Microsoft ASP.NET SignalR
    在 Asp.NET MVC 中使用 SignalR 实现推送功能
    asp.net signalR 专题—— 第一篇 你需要好好掌握的实时通讯利器
    asp.net signalR 专题—— 第二篇 对PersistentConnection持久连接的快速讲解
    后台管理UI推荐
    ASP.NET通用权限系统快速开发框架
    .NET通用基本权限系统框架源代码
  • 原文地址:https://www.cnblogs.com/Small-sunshine/p/13226592.html
Copyright © 2011-2022 走看看