• 什么是Base64算法?什么情况下用Base64算法?


    • base64 编码的本质:将 8bit 二进制数转化为 6bit 的可打印字符。
      Base64编码用于需要将二进制数据转为文本数据进行储存和传输的场景。

    • Javascript内部的字符串,都以utf-16的形式进行保存,因此编码的时候,我们首先必须将utf-8的值转成utf-16再编码;
      解码的时候,则是解码后还需要将utf-16的值转回成utf-8。

    • 问:为什么在进行http传输的时候,需要将Byte数组进行base64编码呢?
      答:因为http协议是文本协议,不同于二进制协议(如Thrift)那样直接进行二进制传输。

    • base64是一种编码算法。为什么叫base64呢?因为这种算法只支持可打印字符中的64个(26个大写字母、26个小写字母、0-9这9个数字、+、/)(再加上作为垫字的"=",实际上是65个字符)。

    • 问:什么是可打印字符?
      答:ASCII码的范围是0-127,其中0-31和127这33个字符属于控制字符(Control characters)。
      剩下32-126这95个字符属于可打印字符(Printable characters),包括数字、大小写字母、常用符号。

    • 早期的一些传输协议,例如传输邮件的SMTP协议,只能传输可打印的ascii字符。导致原本8bit字节码范围(范围0-255)超过了可用的范围。
      比如当邮件传输图片资源的时候,某一个Byte值是10111011B,对应十进制187不属于ASCII码范围,因此无法被传输。
      这个时候,base64编码应运而生了,它利用6bit字符表达了原本的8bit字符。

    • 问:原本的字节码是8bit,base64怎么能够用 6bit 来容纳 8bit 的内容呢?
      答:既然单一字符的位数有限,我们可以增加字符的数量。8和6的最小公倍数是24,这就意味着我们可以用4个base64字符来表示3个传统的8bit字符。
      相比8bit的字符编码,base64编码会多占用三分之一的字节长度,以此为代价实现了更好的兼容性。

    参考:http://mp.weixin.qq.com/s/1xd_sZRzsN9eMeG-tgoX1w

  • 相关阅读:
    程序猿初出茅庐之一:学习方法
    Winform实现鼠标可穿透的窗体镂空效果
    HashMap源码分析(上)
    Java Integer常量池——IntegerCache内部类
    find the Nth highest salary(寻找第N高薪水)
    分布式理论:深入浅出Paxos算法
    smash:一个类unix内核
    【官网翻译】如何在VSCode中使用代码片段功能(snippets)?
    JavaScript与魔数检测
    给你一个团队,你能怎么管-读后感-凝聚力和执行力(1)
  • 原文地址:https://www.cnblogs.com/cag2050/p/7661091.html
Copyright © 2020-2023  润新知