ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 汉字编码问题(转)

汉字编码问题(转)

原创 Linux操作系统 作者:testmvb 时间:2009-08-25 17:15:05 0 删除 编辑

        在计算机中字符通常并不是保存为图像,每个字符都是使用一个编码来表示的,而每个字符究竟使用哪个编码代表,要取决于使用哪个字符集(charset)。
/O3mg1Q"up yL6m[s9~10522540   在最初的时候,Internet上只有一种字符集——ANSI的ASCII字符集,它使用7 bits来表示一个字符,总共表示128个字符,其中包括了英文字母、数字、标点符号等常用字符。之后,又进行扩展,使用8 bits表示一个字符,可以表示256个字符,主要在原来的7 bits字符集的基础上加入了一些特殊符号例如制表符。
:UR:q;\ O#v4}9x l10522540   后来,由于各国语言的加入,ASCII已经不能满足信息交流的需要,因此,为了能够表示其它国家的文字,各国在ASCII的基础上制定了自己的字符集, 这些从ANSI标准派生的字符集被习惯的统称为ANSI字符集,它们正式的名称应该是MBCS(Multi-Byte Chactacter System,即多字节字符系统)。这些派生字符集的特点是以ASCII 127 bits为基础,兼容ASCII 127,他们使用大于128的编码作为一个Leading Byte,紧跟在Leading Byte后的第二(甚至第三)个字符与Leading Byte一起作为实际的编码。这样的字符集有很多,我们常见的GB-2312就是其中之一。
~Kl,Y!I10522540   例如在GB-2312字符集中,“连通”的编码为C1 AC CD A8,其中C1和CD就是Leading Byte。前127个编码为标准ASCII保留,例如“0”的编码是30H(30H表示十六进制的30)。软件在读取时,如果看到30H,知道它小于 128就是标准ASCII,表示“0”,看到C1大于128就知道它后面有一个另外的编码,因此C1 AC一同构成一个整个的编码,在GB-2312字符集中表示“连”。ITPUB个人空间 q$x9M6X;q&kU
   由于每种语言都制定了自己的字符集,导致最后存在的各种字符集实在太多,在国际交流中要经常转换字符集非常不便。因此,提出了Unicode字符集,它 固定使用16 bits(两个字节、一个字)来表示一个字符,共可以表示65536个字符。将世界上几乎所有语言的常用字符收录其中,方便了信息交流。标准的 Unicode称为UTF-16。后来为了双字节的Unicode能够在现存的处理单字节的系统上正确传输,出现了UTF-8,使用类似MBCS的方式对 Unicode进行编码。注意UTF-8是编码,它属于Unicode字符集。Unicode字符集有多种编码形式,而ASCII只有一种,大多数 MBCS(包括GB-2312)也只有一种。ITPUB个人空间 e;lq:}1s$Yl
  例如“连通”两个字的Unicode标准编码UTF-16 (big endian)为:DE 8F 1A 90ITPUB个人空间SM+O]#Y6T
而其UTF-8编码为:E8 BF 9E E9 80 9A
}&znd%XM^10522540  最后,当一个软件打开一个文本时,它要做的第一件事是决定这个文本究竟是使用哪种字符集的哪种编码保存的。软件有三种途径来决定文本的字符集和编码:

  最标准的途径是检测文本最开头的几个字节,如下表:

开头字节 Charset/encoding
b!Ml7jdY }#p4s10522540EF BB BF    UTF-8
Ydr8g0L"m/nGh10522540FE FF     UTF-16/UCS-2, little endianITPUB个人空间~;IE+E.c"A6o'P \
FF FE     UTF-16/UCS-2, big endianITPUB个人空间n0Y8`J"w.H*u
FF FE 00 00  UTF-32/UCS-4, little endian.ITPUB个人空间[:Gx.sQ
00 00 FE FF  UTF-32/UCS-4, big-endian.

  例如插入标记后,连通”两个字的UTF-16 (big endian)和UTF-8码分别为:

例如插入标记后,连通”两个字的UTF-16 (big endian)和UTF-8码分别为:ITPUB个人空间9t2hI B-]V

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10522540/viewspace-613212/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-02-23

  • 博文量
    51
  • 访问量
    162679