暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

编码与解码的历史发展

爱code的斌斌酱 2021-10-20
1118

点击上方蓝字关注我们


    学问之功,贵乎经久不息。

                                         -梁启超


01

编码

SIMPLE TITLE


所谓编码就是将String转为byte[],使得人能够读懂的字符串转换为计算机能够读懂的字节码。


02

解码

SIMPLE TITLE


所谓解码就是将byte[]转为String,使得计算机能够读懂的字节码转换为人能够读懂的字符串。



03

编码与解码的历史发展

SIMPLE TITLE



前言:

我们知道世界上第一台计算机是1946年于美国的宾夕法尼亚大学制造的ENIAC(埃尼阿克),也是第一台采用冯诺依曼体系结构的计算机。关于ENIAC我们不做过多的介绍,因为这个不是本文重点,我们只需要知道ENIAC的诞生是当时二战时期为了计算火炮的弹道,但是这个并不算“美”的计算机的诞生,对后来人类文明的进步产生了深远的影响。作为通用型计算机,其后来被用于风洞设计、天气预报、宇宙射线等领域,当然还有最初的设计目的,被用来计算弹道。可见战争是一面双刃剑,既会给人类带来灾难,也会给人类带来希望和文明。


由于计算机最早出现在美国,因此在计算机发展的初期,美国等少数几个国家按照英语设置了一套编码标准,就是ASCII码。ASCII码就是包含了26个英文字母和一些标点符号,因此用128个整数就能完全表示英文字符。

部分ASCII码对照表


因为ASCII码只能表示128个字符,所以就逐渐的不能够满足实际的生产情况。后来就出现了ISO-8859-1~ISO-8859-15,这里面使用最广泛的就是ISO-8859-1,该编码标准使用了一个字节的8位,可以表示256个字符。同时为了避免乱码问题,ISO-8859-1完全兼容ASCII码,即ISO-8859-1的前128个字符与ASCII码保持一致,只有后128字符才是ISO-8859-1自身扩展的新字符。


GB2312

由中国国家标准总局1980年发布,1981年5月1日开始实施的一套国家标准,标准号是GB 2312—1980。GB 2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB 2312收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。GB 2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。对于人名、古汉语等方面出现的罕用字,GB 2312不能处理,这导致了后来GBK及GB 18030汉字字符集的出现。


GBK:

为了将简体中文和繁体中文,以及一些使用频率较低的罕见字归纳到一个字符集里面,我国又发布了新的编码字符集---GBK编码。值得说明的是GBK编码是对GB2312的扩展。GBK编码使用1个字节存储ASCII码,使用两个字节存储中文汉字(简体或者繁体)。


GB18030:

后来,我们为了能够将中文、生僻字、少数民族文字、日文、朝鲜语等纳入同一套编码,便将GBK升级为GB18030编码,GB18030兼容GBK,可以使用1个字节、2个字节、4个字节存储一个字符。


Unicode:

作为计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式发布1.0版本,2021年9月14日发布14.0版本。


Unicode仅仅是一套规范,并不能直接使用,我们在日常编码中能够直接使用的是UTF-8,UTF-16等。实际上Unicode通过一定的算法将每种语言的每个字符转为了UTF-8/UTF-16等具体的编码类型。Unicode使用4个字节存储一个字符(其中包括了2个字节的附加字符),最常用的UTF-8存储一个字符所用的字节数是不固定的。


UTF-8也是完全兼容ASCII码的,UTF-8存储一个字母或者数字也是用一个字节,这个与ASCII码是一致的。只不过当其存储汉字或者其他字符时,可能会用到2个、3个或者4个字节。


大端和小端:

在实际的生产环境中,我们不单单只需要考虑选择不当的编码字符集所带来的“乱码”问题。


大端和小端也是需要我们考虑的问题,首先让我们来了解下什么是大端和小端?


大端模式就是高位字节存放在内存的低地址端,低位字节存放在内存的高地址端;


小端模式就是低位字节存放在内存的低地址端,高位字节存放在内存的高地址端;

为什么会出现大小端呢?


  1. 最早是由于不同架构的CPU处理多个字节数据的顺序不一样,比如x86的是小端模式,KEIL C51是大端模式。但是后来互联网流行,TCP/IP协议规定为大端模式,为了跨平台通信,还专门出了网络字节序和主机字节序之间的转换接口(ntohs、htons、ntohl、htonl)。


  2. 大小端模式各有优势:小端模式强制转换类型时不需要调整字节内容,直接截取低字节即可;大端模式由于符号位为第一个字节,很方便判断正负。



知道了大小端的存在,我们在进行跨平台的数据处理时,应该关注并注意大小端带来的问题。


End



点个在看你最好看

写留言

文章转载自爱code的斌斌酱,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论