字符编码总结

ASCII:

利用一个字节表示的编码,编码的范围是0-127

这种编码方式主要问题在于无法表示除英文字母以外的其它字符。

而且为了充分利用单字节的表示字符的范围(利用单字节编码一些常用字符可以有效的减少文件的存储空间),许多厂商制定了ASCII的扩展码,比较常见的是IBM制定的已及Latin1

Unicode/UCS:

这两种编码其实是一种编码,主要为了解决世界各国语言文字和专业领域符号表达统一的问题。其编码长度是31位,其中低16位相同的字符称为位于同一平面的字符,其中BMP/Plane0(0x0000~0xFFFF)中包含大多数日常使用的字符。

在计算机中对于Unicode/Ucs产生以下的三种表示

UTF-32/UCS-4:

因为其编码最多有31位,所以很直接的思路就是利用四个字节表示一个字符,这种方法的缺点主要是浪费存储空间,像ASCII这种出现频率极高的字符本身利用一个字节就可以表示,如果采用四个字节表示就相当于平白无故浪费了三个字节。

UTF-16/UCS-2这是一种折中的方法,利用两个字节表示一个字符,这种方法可以完全的的表示BMP字节的字符,但是对于其它的一些平面的字符只能借助于BMP平面的一些控制字符进行扩展进行表示。

UTF-8:

以上编码除了浪费存储空间外还有一个非常严重的缺陷,那就是与C语言不兼容,C语言中类如strcpy之类的函数都是以0x00字节作为字符串结尾的。UTF-8编码是为了解决此问题而提出的,同时它也较好的解决了一般编码表示方法存储空间占用较多的缺陷。因此这种表示方法被广泛应用于计算机当中。

它将每一字节分为三类,1 ASCII 2 控制字符 3 非ASCII的编码

其中ASCII以0xxxxxxx表示(0开头),剩下则以1开头的表示11xxxxxx,10xxxxxxx,其中11xxxxxx为控制字符第一个1后多少个1表示其的多少字节就是编码字节。而10xxxxxx则是为了区别控制字符,以及ASCII编码其它的编码。从这种表示方法我们也可以知道UTF-8的编码是2~6个字节。例如,11110xxx,则其后3个1,表示紧跟着这个字节的3个字节是非ASCII的编码。

posted @ 2014-04-02 21:36  qtalker  阅读(158)  评论(0编辑  收藏  举报