通俗了解字符编码

来源:互联网 发布:鬼刀画册淘宝 编辑:程序博客网 时间:2024/06/05 19:03

首先,我先在这浅谈一下本人对字符编码的认识,说得不对的地方恳请大家批评指正。

目前的 字符编码 大体上分三种

 1.单字节字符集,用1个字节来表示一个字符,如ASCII就属于这种

 2.多字节字符集, 其实在windows下这类字符集大体上 也只分为 单字节字符集 和 双字节字符集,但大多使用的都是 双字节字符,比如  GB-2312

 3.Unicode(统一码)

编码历史

  在计算机中,所有的数据都是以二进制的形式储存在磁盘中的,我们知道,二进制又可以与其他进制相互转换,所以,我们可以理解为 计算机可以存储任意进制的数值。当然,我们这里讨论的是 文本字符数据的存储, 一些 如:美国、英国、意大利 等西方国家的所有字符 就是由 大小写字母 a~z 表示的,加上数字和一些其他的符号等 字符数量也不超过128个,为了在计算机中存储这些信息, ANSI 制定了 ASCII码,目的当然就是 对非数值数据进行编码。 ASCII规定使用 1 个字节 表示一个字符,如  字符 ‘A’ 就可以用十进制 65 十六进制 0x41 来表示,换成二进制就是 0110001,ASCII码的出现 解决了  英文字符在计算机中的存储问题。

  但是后来,随着世界各国语言加入计算机,显然 这一个字节表示字符的ASCII码就完全不能满足大众需求了,所以  后来各国 在ASCII码的基础上,自行 制定了 自己的字符集,这些字符集往往兼容 ASCII ,也就是说  它们 都是在大于128 的基础上 制定字符码的,前128个字符 还是 对应着 基本ASCII的前128个字符,同时,这些语言大多都是由两个甚至更多的字节来存储的。比如  我们国家由中国国家标准总局1980年发布的GB-2312编码(《信息交换用汉字编码字符集》)就是使用2个字节来表示一个汉字。所以 ,严格的来说,诸如GB-2312这类的 由各国 自行发布的编码 应该 隶属于  MBCS (多字节字符集)了。


  由于不同 国家的语言都 制定了 一套不同的字符集,使用起来非常散乱。因此相应的问题就来了,比如 很可能出现 同一个  二进制数值 在不同的国家 就会解释成不同的字符,例如一个 在日本开发的程序(使用的日文),在 中国使用时,软件界面上的字符很可能不是日文了,而变成了一堆乱码。再 比如 要想打开一个文本文件,你不仅要知道他的编码方式,还要安装对应的编码表,否则就可能给你显示出一堆乱码, 还有很多时候,我们的电子邮件或者网页中经常会遇到乱码,这就是因为信息的提供者和信息的读取者使用了不同的编码方式。

  所以这种散乱的编码在涉及国际语言交流时需要经常转换字符集就显得非常不便了。于是后来 Unicode字符集被提出来了。

  Unicode固定使用16bit (两个字节、一个字)来表示一个字符,可以从0x0000~0xFFFF 即可以表示 65536个字符,这几乎完全可以涵盖所有国家语言的字符总和了。有了Unicode,不同语言字符的集都能固定的总和在一个字符集里面了,通俗点就是 每个字符 都有完全不同的唯一二进制了,解决了 MBCS 的二义性。

为了 方便信息交流,标准的 Unicode 被称为 UTF-16, 后来又为了 双字节的Unicode能够在现存的处理单字节的系统上正确传输,出现了UTF-8。Unicode一共有三套编码方式 :
UTF-8  UTF-16  UTF-32

值得一提的是UTF-8保留了ASCII的编码作为其一部分,比如在UTF-8和 ASCII中,'A' 的编码都是0x41,而 UTF-16 和 UTF-32 分别是Unicode的16位和32位的编码方式。




0 0