zoukankan      html  css  js  c++  java
  • 常用编码格式算法

    1、base64

    Base64 是网络上最常见的用于传输 8Bit 字节码的编码方式之一,Base64 就是一种基于 64 个可打印字符来表示二进制数据的方法。可查看 RFC2045 ~ RFC2049 ,上面有MIME的详细规范。

    Base64 编码是从二进制到字符的过程,可用于在 HTTP 环境下传递较长的标识信息。采用 Base64 编码具有不可读性,需要解码后才能阅读。

    Base64 由于以上优点被广泛应用于计算机的各个领域,然而由于输出内容中包括两个以上 “符号类” 字符(+, /, =),不同的应用场景又分别研制了 Base64 的各种 “变种”。为统一和规范化 Base64 的输出,Base62x 被视为无符号化的改进版本。

    引用:Base64百度百科

    按照 RFC2045 的定义,Base64 被定义为:Base64 内容传送编码被设计用来把任意序列的 8位字节 描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)
    常见于邮件、http 加密,截取 http 信息,你就会发现登录操作的用户名、密码字段通过 BASE64 加密的。

    BASE64 的加密解密是双向的,可以求反解。

    案例实现:

    /**
     * Base64 编码、解码测试
     * <br/>
     */
    class Base64Test {
        public static void main(String[] args) {
    
            // 待编码的字符
            String originalStr = "111111";
            System.out.println(String.format("待编码的字符: %s", originalStr));
    
            /* jdk 实现 */
            System.out.println("=================jdk实现=================");
    
            // 获取编码器
            Base64.Encoder encoder1 = Base64.getEncoder();
    
            // 获取解码器
            Base64.Decoder decoder1 = Base64.getDecoder();
    
            // 编码测试
            byte[] encode1 = encoder1.encode(originalStr.getBytes());
            System.out.println(String.format("编码结果:%s", new String(encode1)));
    
            // 解码测试
            byte[] decode1 = decoder1.decode(encode1);
            System.out.println(String.format("解码结果:%s", new String(decode1)));
    
            /* Apache commons-codec 实现 */
            System.out.println("=================Apache commons-codec 实现=================");
    
            // 编码测试
            byte[] encode2 = org.apache.commons.codec.binary.Base64.encodeBase64(originalStr.getBytes());
            System.out.println(String.format("编码结果:%s", new String(encode2)));
    
            // 解码测试
            byte[] decode2 = org.apache.commons.codec.binary.Base64.decodeBase64(encode2);
            System.out.println(String.format("解码结果:%s", new String(decode2)));
    
            /* Spring 实现 */
            System.out.println("------------Spring 实现------------");
            String encodeToString = Base64Utils.encodeToString(originalStr.getBytes());
            System.out.println(String.format("编码结果:%s", encodeToString));
            System.out.println(String.format("解码结果:%s", new String(Base64Utils.decodeFromString(encodeToString))));
        }
    }
    

    运行结果如下:

    20191023215143.png


    2、base62x

    Base62x被视为无符号化的改进版本。

    码云地址:https://gitee.com/xenxin/Base62x

    目前用的人不多,还没有很好的 Java 实现,不过感觉未来会有发展。

    相关文章:Base62x比Base64的编码速度更快吗?


    3、url编码

    url编码 是一种浏览器用来打包表单输入的格式。浏览器从表单中获取所有的name和其中的值 ,将它们以name/value参数编码(移去那些不能传送的字符,将数据排行等等)作为URL的一部分或者分离地发给服务器。不管哪种情况,在服务器端的表单输入格式样子象这样:

    theName=Ichabod+Crane&gender=male&status=missing& ;headless=yes

    当URL地址里包含非西欧字符的字符串时,系统会将这些字符转换成 application/x-www-form-urlencoded 字符串,表单里提交时也是如此,当包含非西欧字符的字符串时,系统也会将这些字符转换成 application/x-www-form-urlencoded 字符串。

    URL编码遵循下列规则:

    每对name/value由&;符分开;每对来自表单的name/value由=符分开。如果用户没有输入值给这个name,那么这个name还是出现,只是无值。任何特殊的字符(就是那些不是简单的七位ASCII,如汉字)将以百分符%用十六进制编码,当然也包括象 =,&;,和 % 这些特殊的字符。其实url编码就是一个字符ascii码的十六进制。不过稍微有些变动,需要在前面加上“%”。比如“”,它的ascii码是92,92的十六进制是5c,所以“”的url编码就是%5c。

    相关文章:


    Java实现:

    /**
        * URLEncoder & URLDecoder 测试
        */
    public static void main(String[] args) throws UnsupportedEncodingException {
        /* 测试编码 */
        // 将普通字符串转换成 application/x-www-form-urlencoded 字符串 采用 UTF-8 字符集进行编码
        String encode = URLEncoder.encode("北京大学", "UTF-8");
        System.out.println(String.format("编码结果:%s", encode));
    
        /* 测试解码 */
        //将 application/x-www-form-urlencoded 字符串转换成普通字符串 采用 UTF-8 字符集进行解码
        String decode = URLDecoder.decode(encode, "UTF-8");
        System.out.println(String.format("解码结果:%s", decode));
    }
    

    运行结果如下:

    20191023172337.png


    作者:不敲代码的攻城狮
    出处:https://www.cnblogs.com/leigq/
    任何傻瓜都能写出计算机可以理解的代码。好的程序员能写出人能读懂的代码。

     
  • 相关阅读:
    《Machine Learning in Action》—— 白话贝叶斯,“恰瓜群众”应该恰好瓜还是恰坏瓜
    《Machine Learning in Action》—— 女同学问Taoye,KNN应该怎么玩才能通关
    《Machine Learning in Action》—— Taoye给你讲讲决策树到底是支什么“鬼”
    深度学习炼丹术 —— Taoye不讲码德,又水文了,居然写感知器这么简单的内容
    《Machine Learning in Action》—— 浅谈线性回归的那些事
    《Machine Learning in Action》—— 懂的都懂,不懂的也能懂。非线性支持向量机
    《Machine Learning in Action》—— hao朋友,快来玩啊,决策树呦
    《Machine Learning in Action》—— 剖析支持向量机,优化SMO
    《Machine Learning in Action》—— 剖析支持向量机,单手狂撕线性SVM
    JVM 字节码指令
  • 原文地址:https://www.cnblogs.com/leigq/p/13406516.html
Copyright © 2011-2022 走看看