zoukankan      html  css  js  c++  java
  • 字符编码总结

    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的编码。

  • 相关阅读:
    C
    C
    你好,欢迎到这里来
    数组专题
    web前端的性能优化
    MornUI 源码阅读笔记
    application tips
    [转]就这样,创建了自己的运行时共享库(RSL)
    [转]glew, glee与 gl glu glut glx glext的区别和关系
    编码相关了解
  • 原文地址:https://www.cnblogs.com/qtalker/p/3641647.html
Copyright © 2011-2022 走看看