编码的一些总结

·  阅读 358

编码的一些总结

背景

首先要知道,计算机存储有一个最小单位为 ,也就是常说的 bit 。一个 bit ,值只能为1或0。一个字节,由八个位组成,即1 byte = 8 bit。因为一个字节由8个位组成,比如 1010 0101 ,所以显然一个字节能表示的最大的数就是8位全为1,即 1111 1111(二进制)。转为10进制,也就是255。想表示更大的数,就需要多个字节拼起来,比如两个字节拼起来的最大数为 1111 1111 1111 1111,对应的十进制是65535。计算机上要显示的文字内容,有很多,比如abcd,1234,+-*/等等,这些每一个字符,都是跟一个数字对应起来的,形成了一个字典,这个字典就是编码规则。

ASCII

计算机是美国人发明的,那个时候,需要在计算机上显示的字符,内容构成很简单的,只包含了所有大小写字母,数字,和一些常用符号,总计有127个字符。这样的话字符只要用一个字节表示就够了。比如65对应A,z对应122。这个对应关系,便被称为 ASCII 编码。

GB2312等等

后来,随着计算机的普及,世界各国的人都开始使用计算机了。中国人要在计算机上显示中文,日本人要在计算机上显示日文,诸如此类,世界上有很多语言的文字都需要显示,然而计算机当前只能显示127个基本字符,这显然是远远不够的。因此,各国开始搞自己的编码了。因为新的字符实在太多了,而一个字节显然不够,所以新的编码格式,比如中国的 GB2312 ,就是用至少两个字节来表示一个字符。类似的,日本人有自己的 Shift_JIS 编码,韩国人有 Euc-kr 。这时的编码就很乱了。

Unicode

因为类似 GB2312 一样的各种编码互相冲突,所以又出现了一种新的编码方式 Unicode ,来将所有的编码统一处理,这样不管你用什么国家的语言,只要用我 Unicode ,那都可以显示出来。在 Unicode 编码中,一个字符通常由两个字节组成(除非一些非常偏僻的字符 会多一点)。

UTF-8

虽然 Unicode 很通用,但是有一些冗余的情况。为什么呢?比如一个大写字母A,他之前在 ASCII 下对应65,二进制也就是0100 0001,在 Unicode 编码中,只要在前面补一个0字节即可,即他对应为0000 0000 0100 0001。这样问题来了,之前 ASCII 定义的这些字符在 Unicode 中,都在前面白白加了8个0,这样在传输时多浪费空间啊。所以,由 Unicode 演化出一种新的编码, UTF-8 。在 UTF-8 中,不同的字符对应的字节数也不同。常见的英文字母等 ASCII “元老”,只用一个字节表示。而像中文字符这样的,一般用三个字节表示。

now

现在,因为 Unicode 编码占用空间多,所以在传输或存储时都使用了 UTF-8 编码,而在计算机内存中使用时,则使用着 Unicode 编码。比如我们在写代码的时候,在IDE中写入文件的代码,都是用 UTF-8 编码格式保存起来的。在编译运行时,这些字符被读取到内存中,此时用的编码格式则是 Unicode

分类:
Android
标签:
分类:
Android
标签:
收藏成功!
已添加到「」, 点击更改