计算机组成原理学习三:字符集和字符编码

一.基本概念

  1. 字符集(Charset)就是一组抽象字符的集合。
    1. 字符集常常和一种具体的语言文字对应起来,该文字中的所有字符或者大部分常用字符就构成了该文字的字符集,比如英文字符集。
    2. 一组有共同特征的字符也可以组成字符集,比如繁体汉字字符集、日文汉字字符集。
  2. 我们知道计算机内部是用二进制表示数据的,计算机要处理各种字符,就需要将字符和二进制内码对应起来,这种对应关系就是字符编码(Encoding)。
    1. 制定编码首先要确定字符集,并将字符集内的字符排序,然后和二进制数字对应起来。
    2. 根据字符集内字符的多少,会确定用几个字节来编码。
    3. 每种编码都限定了一个明确的字符集合,叫做被编码过的字符集(Coded Character Set),这是字符集的另外一个含义。通常所说的字符集大多是这个含义。下文我还是以字符编码这个词来描述。

二.有哪些字符编码

  1. 标准ASCII
  2. 扩展ASCII
    1. ISO 8859系列
    2. GB系列
    3. UCS
    4. Unicode

三.标准ASCII编码

     ASCII: American Standard Code for Information Interchange,美国信息交换标准码。

  1. ASCII规定了128个字符(空格、标点符号、数字、大小写字母),以及其对于的128个二进制表示(0000 0000 - 01111 1111)。
  2. 一个ASCII码值占一个字节(8个二进制位),标准(原生态)ASCII表中最高位(b7)用作奇偶校验位,其它的七位就表示上面说的128个字符。
  3. 有时候面试官会问,字符'A'对于的ASCII值是多少,还是记住这些吧。'A'=65,'a'=97,'0'=48。

四.扩展ASCII编码

  1. ISO 8859 - 数字:ISO 8859,全称ISO/IEC 8859,是国际标准化组织(ISO)及国际电工委员会(IEC)联合制定的一系列8位字符集的标准。
    1. 标准ASCII收录了空格及94个“可印刷字符”,足以给英语使用。但是,其他使用拉丁字母的语言(主要是欧洲国家的语言),都有一定数量的变音字母,于是它们利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制1000 0010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。
    2. 但是,地区和地区之间在使用这个闲置的最高位时,并不是一致的啊,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中又会代表另一个符号。于是产生了ISO 8859-数字 表示不同地区的编码。
          * ISO 8859-1 (Latin-1) - 西欧语言 
          * ISO 8859-2 (Latin-2) - 中欧语言 
          * ISO 8859-3 (Latin-3) - 南欧语言。世界语也可用此字符集显示。 
          * ISO 8859-4 (Latin-4) - 北欧语言 
          * ISO 8859-5 (Cyrillic) - 斯拉夫语言 
          * ISO 8859-6 (Arabic) - 阿拉伯语 
          * ISO 8859-7 (Greek) - 希腊语 
          * ISO 8859-8 (Hebrew) - 希伯来语(视觉顺序) 
          * ISO 8859-8-I - 希伯来语(逻辑顺序) 
          * ISO 8859-9 (Latin-5 或 Turkish) - 它把Latin-1的冰岛语字母换走,加入土耳其语字母。 
          * ISO 8859-10 (Latin-6 或 Nordic) - 北日耳曼语支,用来代替Latin-4。 
          * ISO 8859-11 (Thai) - 泰语,从泰国的 TIS620 标准字集演化而来。 
          * ISO 8859-13 (Latin-7 或 Baltic Rim) - 波罗的语族 
          * ISO 8859-14 (Latin-8 或 Celtic) - 凯尔特语族 
          * ISO 8859-15 (Latin-9) - 西欧语言,加入Latin-1欠缺的法语及芬兰语重音字母,以及欧元符号。 
          * ISO 8859-16 (Latin-10) - 东南欧语言。主要供罗马尼亚语使用,并加入欧元符号。 
      
       
    3. 所有这些编码方式中,0-127表示的符号是一样的,不一样的只是128—255的这一段。兼容ASCII。
    4. 记住ISO 8895 - 数字仍然是单字节编码。
  2. GB类
    1. GB2312:使用2个字节表示,包括6763个汉字。几乎覆盖所有高频率汉字。低字节兼容ASCII。
    2. GBK:使用2个字节表示,包括21003个汉字。是GB2312的扩展,加入对繁体字的支持,兼容GB2312。
    3. BIG5:使用2个字节表示,包括国标繁体汉字13053。是台湾繁体字集。
    4. GB18030:它采用变字节表示(1 ASCII,2,4字节),包括27484个汉字。
  3. UCS:通用字符集(Universal Character Set,UCS)是由ISO制定的ISO 10646(或称ISO/IEC 10646)标准所定义的字符编码方式。
    1. 采用4个字节编码。
    2. UCS包含了已知语言的所有字符。除了拉丁语、希腊语、斯拉夫语、希伯来语、阿拉伯语、亚美尼亚语、格鲁吉亚语,还包括中文、日文、韩文这样的象形文字,UCS还包括大量的图形、印刷、数学、科学符号。
    3. * UCS-2: 2byte编码,与unicode的2byte编码基本一样。 
      * UCS-4: 4byte编码,目前是在UCS-2前加上2个全零的byte。 所以从编码内容上看UCS=Unicode。
  4. Unicode:统一码、万国码、单一码
    1. Unicode为世界650种语言进行统一编码,兼容ISO-8859-1。
    2. 采用2个字节编码。实际上目前版本的Unicode尚未填充满这2个字节,保留了大量空间作为特殊使用或将来扩展。

五.编码实现方式

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

  1. UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。
  2. UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

  3. Unicode转换成UTF-8

    Unicode符号范围       | UTF-8编码方式
    (十六进制)                     | (二进制)
    --------------------+---------------------------------------------
    0000 0000-0000 007F | 0xxxxxxx
    0000 0080-0000 07FF | 110xxxxx 10xxxxxx
    0000 0800-0000 FFFF  | 1110xxxx 10xxxxxx 10xxxxxx
    0001 0000-0010 FFFF  | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    

六.本文侧重点

     本文主要侧重把常见编码方式进行分类,以及它们之间的兼容性。没有谈到每种编码的字节什么范围到什么范围保存数据。

六.参考文章 

  1. http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
  2. http://turandot.iteye.com/blog/1703258

     只是对上述文章的一个理解和整理,欢迎拍砖,欢迎指正。

猜你喜欢

转载自zy19982004.iteye.com/blog/1706402