什么是base64,base64与Hex编码,ASCII编码,UTF-8编码都是什么关系

1 计算机开始之初,二进制

计算机所用的语言是什么呢?这个语言非常简单,只有0和1两种表示。0代表否,1代表是。通过0和1的各种组合,以及0和1之间的各种运算(位运算),计算机就能进行理解、分析这个世界,并帮助人类完成工作了。

但是0和1太简单了,简单到任何一个简单的数字都可能用一长串0和1来表示。举了例子,如果让计算机记住1000这个数,计算机就要记住11,1110,1000这么长一串数字。计算机倒是好记,但是人类记不住啊… 有没有一种方法,能够让计算机表示的数据短一点,好记一点呢?

2 Hex编码:缩短书写,变得稍微可接受

Hex就是最简单的方法了。人类习惯于使用十进制,毕竟人类有是个手指,十个一进位,挺好的!计算机本质上是二进制,就0和1两种数字的表示方法,所有其他可以直接转换的表示方法中,进制只能有2这个数,不能有其他的数字。比如4,8,16就没问题。其他的数字,不管怎么折腾,转换后也得是2^n形式。

想让人类和计算机都能接受表示形式,8进制和16进制都是可以接受的。8进制的话,只使用0-7折8个数字就好了。16进制,光用数字是不够了,还得用用其他的字符。然而,计算机毕竟是美国人发明的,他们觉得,干脆,就16进制:用0-9表示前10个数,后面的用A、B、C、D、E、F表示,不区分大小写。这就是最简单的Hex编码了。

Hex的编码原理是:把一长串二进制数每4个分一组,如果位数不够就在高位补0。4位数字一共只有16种情况,分别用0-9,A-F表示这16种情况。

 
3 ASCII码:要让可读性更强

Hex编码虽然好,但有个问题:从计算机上打开个文件,满眼的十六进制数,很头大啊… 十六进制还是不太好表示文本。能不能创建一种方法,能表示键盘打出来的全部英文字符、符号呢?键盘打不出来的字符,比如什么回车啦,占位啦,用特殊的符号表示。这样一来,打开一个文件,满眼英文,岂不是很爽快…

美国作为计算机的始祖国家,自然要推出一个这样的标准代码表。这就是美国信息交换标准代码,简称ASCII码表。这个码表包括了数字、英文大小写、符号、以及各种各样的转义字符,可以包含英文所用的全部功能。很快地,ASCII码称为了国际标准,现在大家知道的编码形式,都是与ASCII码兼容的。

4 UTF-8:解决除英语之外其他语言

这个码表一出来,英语国家开心了…其他国家的脑袋疼了… 带注音的符号怎么办?日语韩语怎么办?最为博大精深的中文怎么办… 于是,各个国家也推出了本国语言的编码表。但是,为了能在计算机系统中通用,这些编码表基本都与ASCII码兼容。

最为知名的就是UTF-8了。这个编码又称为万国码,顾名思义,就是支持包括中文简体、中文繁体、日语、韩语等各种语言的编码。这玩意太复杂了… 我就不细说了。

5 base64:多种编码沟通的桥梁

既然每个国家都有自己的编码表了,问题也就来了。现在都国际化了,我要用一个支持本国语言的编码系统,打开另一个编码系统编码的文本,会出现什么情况呢?这就是乱码了… 更为严重的是,随着互联网的出现,各个国家的电脑都需要通信,而通信的一种方式就是使用URL地址。每个国家都希望把这个地址写成自己国家的语言。但这会导致其他国家根本没法访问地址,因为打不出这个字符嘛。所以,人类迫切需要一种中间编码形式,既能够兼容ASCII码,又能够把任意一种编码形式转换成只使用可读字符就能表示的编码。其中一种编码形式,就是Base64编码。

Base64编码,顾名思义,用64个可读字符进行编码。与Hex的16个字符相比多了很多,但是比ASCII码又少了一倍,去除了不可读字符。标准Base64编码中,这些字符是:

  • 数字:0,1,2,3,4,5,6,7,8,9,共10个
  • 小写字母:a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,共26个
  • 大写字母:A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,共26个
  • 加好+以及斜杠/

这种编码形式长度也短,效率也高。这样一来,数据通信的时候,不管来的是什么语言,都转化成Base64后再发送和接收。要是别国地址什么的打不出来,就直接打Base64编码形式就好了。

 
 
base64算法与各种编码交互:比如 0100111100101010100011 这串二进制,在UTF-8里表示的是 “我是谁”。如果你想把“我是谁”转化成BASE64,你就要先把“我是谁”转化成“0100111100101010100011” 这串二进制(在UTF-8码表里找映射),然后再把这串二进制转化成 “ZG0abd12" 的BASE64 编码。具体这串二进制怎么转化成base64编码的请看base64算法。
base64算法:base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。这样说会不会太抽象了?不怕,我们来看一个例子:

  转换前 aaaaaabb ccccdddd eeffffff 
  转换后 00aaaaaa 00bbcccc 00ddddee 00ffffff

然后转换后的二进制对应base64码表上面64个字符,进行替换就产生base64码。

base64特点:1、速度非常快。3、长短也短。3、能够将字符串A转换成字符串B,而且如果你光看字符串B,是绝对猜不出字符串A的内容来的。
base64误区:这种编码形式长度也短,效率也高。这样一来,数据通信的时候,不管来的是什么语言,都转化成Base64后再发送和接收。要是别国地址什么的打不出来,就直接打Base64编码形式就好了。
 
本文参考知乎问答https://www.zhihu.com/question/38036594
 

各种计算机编码与base64的更多相关文章

  1. 计算机编码规则之:Base64编码

    目录 简介 Base64和它的编码原理 Base64的变体 Base64的编码细节 总结 简介 我们知道计算机中的文件可以分为两种,一种是人肉眼可读的文本类文件,一种是肉眼不可读的二进制文件.一般来说 ...

  2. 字符串编码、Base64字符串 互转

    /// <summary>  /// 将字符串编码为Base64字符串  /// </summary>  /// <param name="str"& ...

  3. URL编码和Base64编码 (转)

    我们经常会遇到所谓的URL编码(也叫百分号编码)和Base64编码.      先说一下Bsae64编码.BASE64编码是一种常用的将二进制数据转换为64个可打印字符的编码,常用于在通常处理文本数据 ...

  4. Java基础--常见计算机编码类型

    计算机编码指电脑内部代表字母或数字的方式,常见的编码方式有:ASCII编码,GB2312编码(简体中文),GBK,BIG5编码(繁体中文),ANSI编码,Unicode,UTF-8编码等. 1.ASC ...

  5. 【编码】Base64编码

    简述 为什么叫Base64?个人理解是,基础的64个字符. 而它的作用?用基础的(可理解为可安全传输的)64个字符,来表示难以表示的二进制或对程序造成干扰的字符. Base64的编码过程 自行编码分析 ...

  6. Unicode字符集,utf8编码,base64编码简单了解

    Unicode字符集,utf8编码,base64编码简单了解 Unicode字符集,ASCII,GB2312编码集合等,类似于不同的字典,不同的字符的编码,类似于字典中的字在哪一个页哪一排. 当不同系 ...

  7. 编码之Base64编码

    Base64编码 是一种基于 64 个可打印字符来表示二进制数据的方法.目前 Base64 已经成为网络上常见的传输 8 位二进制字节代码的编码方式之一. 为什么会有 Base64 编码呢?因为有些网 ...

  8. 计算机编码方式详解(Unicode、UTF-8、UTF-16、ASCII)

    整理这篇文章的动机是两个问题: 问题一: 使用Windows记事本的"另存为",可以在GBK.Unicode.Unicode big endian和UTF-8这几种编码方式间相互转 ...

  9. PHP将图片转base64编码以及base64图片转换为图片并保存代码

    图片转base64编码 /*图片转换为 base64格式编码*/ $img = 'uploads/01.png'; $base64_img = base64EncodeImage($img); ech ...

随机推荐

  1. HDU 3856 Palindrome ( Manacher + RMQ + 二分 ) WA!!!

    不知道错在哪了,求大神指教!!! 思路:用manacher求出每个以str[i]为中心轴的回文串的长度,RMQ预处理区间最大值,对于每个查询,二分最大回文串长,判定是否可行. #include < ...

  2. 软工实践Alpha冲刺(7/10)

    队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 已经解决登录注册等基本功能的界面. 完成非功能的主界面制作 ...

  3. Vue.js特性

    1. MVVM模式 M:model,业务模型,用处:处理数据和提供数据. V:view,用户界面.用户视图. 业务模型model中的数据发生改变时,用户视图view也随之变化. 用户视图view改变的 ...

  4. html & email template

    html & email template inline style build tools https://templates.mailchimp.com/getting-started/h ...

  5. 在LinkedIn的 Kafka 生态系统

    在LinkedIn的 Kafka 生态系统 Apache Kafka是一个高度可扩展的消息传递系统,作为LinkedIn的中央数据管道起着至关重要的作用. Kafka 是在2010年在LinkedIn ...

  6. WordPress多本小说主题–WNovel主题发布,十分钟搭建小说站! 现已更新至1.2版本

    本文属于<WNovel主题操作手册>文章系列,该系列共包括以下 8 部分: WNovel主题使用手册之–主题安装及更新教程 WNovel主题使用手册之–小说管理 WNovel主题使用手册之 ...

  7. 【bzoj3530】[Sdoi2014]数数 AC自动机+数位dp

    题目描述 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串.例如当S=(22,333,0233)时,233是幸运数,2333.20233.3223不是幸运 ...

  8. [ARC068F] Solitaire [DP]

    题面 传送门 思路 单调性 首先,显然可以发现这些数在放进双端队列之后肯定是一个$V$形的排布:1在最中间,两边的数都是单调递增 那么我们拿出来的数,显然也可以划分成2个单调递减的子序列(因为我们也是 ...

  9. EAR、JAR、WAR(IT)

    EAR文件包括整个项目,内含多个ejb module(jar文件)和web module(war文件)   JAR.WAR.EAR.在文件结构上,三者并没有什么不同,它们都采用zip或jar档案文件压 ...

  10. Require.js 详细了解

    一.Require.js 作用 1.1.是JS 文件加载器,实现js脚本的AMD异步加载. 保证不阻塞页面的渲染和其后的脚本的执行,并提供了在加载完成之后的执行相应回调函数的功能. 1.2.实现JS. ...