计算机中字符集和编码


阮一峰:字符编码笔记:ASCII,Unicode 和 UTF-8

字符和编码

HTML 字符集

祖先:ASCII 

上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为 ASCII 码,一直沿用至今。

ASCII 码一共规定了128个字符的编码,比如空格SPACE是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的一位统一规定为0。

128个符号是不够的,出现了其他编码

不过,ASCII 依然是许多英文用户的不二选择。


GB2312

中国人民通过对 ASCII 编码的中文扩充改造,产生了 GB2312 编码,可以表示6000多个常用汉字。

汉字实在太多了,还有繁体、各种字符呀,于是加以扩展,有了GBK;


Unicode

Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。

Unicode,就像它的名字都表示的,这是一种所有符号的编码。

Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

新的问题又出现了:如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。

20 世纪 90 年代初,一个叫 Unicode 联盟(The Unicode Consortium)的非营利组织尝试将地球上所有用于书写的符号进行统一编码。其目标包括拉丁字母、斯拉夫字母(кириллица)、中国象形文字(象形)、数学和逻辑符号( , ≥),甚至表情和“杂项”(miscellaneous)符号,如生化危机标记( )和和平符号( )等,编码的结果就是你熟知的 UTF-8。

本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间

UTF-*

互联网的普及,强烈要求出现一种统一的编码方式。UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式。其他实现方式还包括 UTF-16(字符用两个字节或四个字节表示)和 UTF-32(字符用四个字节表示),不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8 是 Unicode 的实现方式之一。

字符 ASCII Unicode UTF-8
A 01000001 00000000 01000001 01000001
x 01001110 00101101 11100100 10111000 10101101

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。


所以你看到很多网页的源码上会有类似<meta charset="UTF-8" />的信息,表示该网页正是用的UTF-8编码。




猜你喜欢

转载自blog.csdn.net/sinat_23880167/article/details/79714623
今日推荐