ASCII
在计算机刚诞生的时候,采用8个bit
作为一个字节( byte
),每个 bit
其实二进制的一位长度,即8bit = 00000000(0) ~ 11111111(255),因此一个字节的最大长度为 255。那么两个字节的最大长度就是 65535, 依次类推。
由于计算机诞生于美国,美国使用的语言又是字母、数字和标点符号组成,因此被编码到计算机中的字符只有127个,我们称这个编码为 ASCII
码。比如大写字母 A
的编码是 65。
后来由于计算机在全球范围得到广泛应用,因为各国语言不同的原因,一个字节就开始不够用了,比如中文就需要至少两个字节才能表示。所以中国也制定了自己的 GB2312
标准。
Unicode
可以想象,像中国一样,每个国家都一套自己的编码标准,那么久很难做到统一。比如中文,在其他国家的标准中就会呈现为乱码,因此,需要一种能够统一的一套编码,那就是 Unicode
。
Unicode
把所有语言统一到一套编码中,这样在全球范围内,就不会出现乱码了。Unicode
通常用两个字节表示如整数范围:00000000 00000000 ~11111111 11111111
如果用 Unicode 编码表示 A,那么 A = 00000000 01000001,即在ASCII
中不够两个字节的,需要前面8位补零
UTF-8
Unicode
统一采用两个字节甚至更多的做法也会产生新的问题,虽然做到了统一编码,但是如果我们的文档大多采用英文的话,那么Unicode
的两个字节 和 ASCII
的一个字节,在内存中就需要多出一倍的存储空间,所以在内存和传输上就比较浪费资源。
所以,为了尽可能节省内存,UTF-8
编码就应运而生了。跟 Unicode
一样,UTF-8
也是一套统一的编码,但是唯一的不同是,UTF-8
会根据字符实际占用字节的大小,进行编码,比如原本在 ASCII
编码中的英文字母,在 UTF-8
中也只占用一个字节;中文通常占用三个字节。在编码方面,UTF-8
做到了统一和节省内存资源。
文本在计算机内存中,仍然统一使用 Unicode
编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。
浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器: