微信公众号:PHP在线
【摘要】本文介绍一下 ASCII、ANSI、GB2312、GBK、UNICODE、UTF-8 这五种编码的区别与联系,有助于大家进一步的掌握计算机相关知识与开发的基本理论知识。
一、ASCII 码
ASCII:"American Standard Code for Information Interchange",叫做 "美国信息交换标准码"。所有数据存储在计算机内都是以一个二进制的字符串表达的。每个二进制位(bit)有 0 和 1 两种状态。八个二进制位(bit)成为一个字节 (byte), 从 0000 0000 到 1111 1111 间 ,可以组成 256 种状态。ASCII 码一共规定了 128 个字符的编码,0-9A-Za-z 等等,只占用了一个字节的后 7 位,最前面一位都是 0。即 0000 0000 到 0111 1111 间。
二、ANSI、GB2312、GBK
英文用 128 个符号编码就够了,但是每个国家都有自己的语言,法语、日语、中文简体、中文繁体等等,在现有的 ASCII 码表中是无法表示出来的。对于中文简体电脑系统中,咱们国家标准总局发布了 GB2312 ,即扩展了 ASCII 码,最后出现了 GB2312、GBK 等,GB2312 是简体中文的码,GBK:支持简体中文及繁体中文、兼容 GB2312 编码,BIG5 是支持繁体中文。GB2312 使用两个字节来存储一个汉字的,这样就可以存储较多的汉字了,这里就不详谈 GB2312 的编码方式了,但是要记住一点,GB2312、GBK 与 Unicode 和 UTF-8 是没有关联的,这是咱们国家自己定义的标准。当然除了中文简体系统,还有日文系统 Shift_JIS ,韩文系统 EUC_KR,法文系统等等不同国家自己对于 ASCII 码的扩展,都是基于 ASCII 采用一个、两个或者三个字节的扩充,这里不详谈。然后我们就使用 ANSI 来对 GB2312,GBK,Shift_JIS,EUC_KR 进行一个统称,即指不同国家对 ASCII 编码的扩展,成为 ANSI 。这样在中文简体电脑系统下 ANSI 默认指的是 GB2312,在繁体系统下默认是采用 BIG5 编码,在日文电脑系统中 ANSI 默认是 Shift_JIS 编码,韩文就是 EUC_KR。不同国家的不同 ANSI 编码是互补兼容的,相互独立的。
三、UNICODE、UTF-8
每个国家都有自己的编码,就会造成一个问题就是同一个二进制数在不同的编码下可能对应着不同的符号。因此,想要打开一个文本文件,若它在日文系统中 ANSI 编码是 Shift_JIS ,将它拷贝到中文简体系统中,也使用 ANSI 编码打开,就会出现乱码,原因是中文简体系统中的 ANSI 编码是 GB2312 ,对于日文编码是无法识别的,无法找到对应的符号,所以出现乱码。这样的话,Shift_JIS 编码的文件就只能在日文系统下正常打开。为了能够实现不同国家编码能够在不同系统下互通,于是乎就出现了 UNICODE 符号集 和 UTF-8 编码。UNICODE 称为统一码或者万国码 。UNICODE 不是一种编码方式,而是一个符号集合,规定了全世界每个符号对应的二进制数,这一个全球范围内的统一。而 UTF-8 就是 UNICODE 的实现方式之一。UTF-8 编码的最大特点是,它是可变长编码方式,它可以使用 1-4 个字节表示一个符号。编码方式如下:(1)对于单字节,UTF-8 编码与 ASCII 码是一样的。(2)对于 n 字节编码(n = 2,3,4),如下图所示,即将符号对应的二进制码从右到左对 xxx 符号进行替换,位数不够,则用 0 替换。当然 UNICODE 的实现方式还有 UTF-16 等等,具体我也不清楚是什么编码方式,也不用去了解。
四、编码的转换
通过万国码 UNICODE 可以实现编码之间的转换:ANSI 转 UTF-8 :先将 ANSI 转换为 Unicode ,然后将 Unicode 转换为 UTF-8;UTF-8 转 ANSI : 先将 UTF-8 转为 Unicode,然后将 Unicode 转为 ANSI。这样我们就可以将不同的 ANSI 进行相互转换喽。
版权归 马富天PHP博客 所有
转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^