Contents
  1. 1. 编码与加密
    1. 1.1. 加密
    2. 1.2. 编码
    3. 1.3. 加密与编码的关系
  2. 2. 字符编码
  3. 3. 数据在计算机中的存储
    1. 3.1. 第一步 如何存储0和1
    2. 3.2. 第二步 如何存储数字
    3. 3.3. 第三步 如何存储字符
    4. 3.4. 第四步 如何存储汉字
    5. 3.5. 第五步 如何存储所有字符
    6. 3.6. 第六步 如何将Unicode存到计算机里

编码与加密

加密

什么是编码?他与加密有什么区别?
在密码学中,加密(英语:Encryption)是将明文信息改变为难以读取的密文内容,使之不可读的过程。只有拥有解密方法的对象,经由解密过程,才能将密文还原为正常可读的内容。

编码

那么什么是编码呢?
编码(Encoding)在认知上是解释传入的刺激的一种基本知觉的过程。技术上来说,这是一个复杂的、多阶段的转换过程,从较为客观的感觉输入(例如光、声)到主观上有意义的体验,是信息从一种形式或格式转换为另一种形式的过程。
解码,是编码的逆过程。

加密与编码的关系

从概念上可以看出,编码只是表现形式的转换,没有保密的作用,因为编码和解码的算法是公开的,只要知道是什么编码的内容,任何人都可以轻松地解码。从这个角度看加密也一种编码,只是解密算法是非公开的。

字符编码

字符编码(英语:Character encoding)、字集码是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。常见的例子包括将拉丁字母表编码成摩斯电码和ASCII。其中,ASCII将字母、数字和其它符号编号,并用7比特的二进制来表示这个整数。通常会额外使用一个扩充的比特,以便于以1个字节的方式存储。

在计算机技术发展的早期,如ASCII(1963年)和EBCDIC(1964年)这样的字符集逐渐成为标准。但这些字符集的局限很快就变得明显,于是人们开发了许多方法来扩展它们。对于支持包括东亚CJK字符家族在内的写作系统的要求能支持更大量的字符,并且需要一种系统而不是临时的方法实现这些字符的编码。

为了弄懂计算机是怎么实现编码的,就要先理解计算机如何存储数据的。

数据在计算机中的存储

我们知道数据在计算机中是以二进制的形式存储的,那么有没有想过01这些数据是怎么存在计算机当中的呢?

第一步 如何存储0和1

不知道你们有没有听过一个东西,叫做——电容器。顾名思义,这是一种能容纳电荷的容器。与普通的电池不同的是,它的充电速度很快,并且因为不会转化为化学能所以电量流失的也很快。因此需要经常刷新。在我们的计算机中,CPU有一个参数是Hz,便是指每秒钟能充多少次电。数据在内存中以二进制的方式存储,事实上是通过对小电容器的充放电来完成的。

第二步 如何存储数字

当然是把数字转化成二进制啦

第三步 如何存储字符

既然能够存储0和1,那存储字符也就不是什么难事了吧。我们只需要把字符和二进制一一对应起来,然后责令计算机来记住它,就万事大吉了。ASCII美国信息交换标准码就是干这件事。

第四步 如何存储汉字

当然,早期的时候计算机并没有在中国兴起,所以中文并不能被计算机所识别,直到1980年GB2312(信息交换用汉字编码字符集)横空出世。功能与ASCII相似。当然,后来又有了GBK(国际标准扩展),我们暂且不提。

第五步 如何存储所有字符

照葫芦画瓢,将所有的字符进行编号,所以有了Unicode字符集。但是这里有一个问题,虽然它可以存储世界上所有的字符,但是如果你的编码是000000000000001,它是不会自动给你简化成1的。由此直接导致了所有的文字存储代价都会翻倍,而这样的代价,是很多人都不愿意看见的。

第六步 如何将Unicode存到计算机里

这里稍微解释一下最后一行,第一块的两个11是指后边有两串跟着,紧接着的10是指两串开头两个标志位是10。上边的Unicode编码中截取后两个字节放到下边utf-8中除标志位之外的地方,也就是说,除了第一块开头的1110,第二块和第三块开头的10,我们有4+6+6=16位来依次存储上边的8+8=16位字符串。
如你所见,这就是UTF-8,一种编码方式。它采用了变长存储的形式来表示Unicode字符集。

Contents
  1. 1. 编码与加密
    1. 1.1. 加密
    2. 1.2. 编码
    3. 1.3. 加密与编码的关系
  2. 2. 字符编码
  3. 3. 数据在计算机中的存储
    1. 3.1. 第一步 如何存储0和1
    2. 3.2. 第二步 如何存储数字
    3. 3.3. 第三步 如何存储字符
    4. 3.4. 第四步 如何存储汉字
    5. 3.5. 第五步 如何存储所有字符
    6. 3.6. 第六步 如何将Unicode存到计算机里