本质啊本质之五:字符编码的本质

来源:互联网 发布:gnu make for windows 编辑:程序博客网 时间:2024/04/29 01:08

字符编码有好多种,平时容易见到的如:ASCIIgb2312gbkUnicode

 所谓字符编码就是对人类的文字符号进行编号(因为计算机里一切都是数字),如“B”6”

 吃透这个概念要注意:

1.       在计算机内部,一切的一切都是纯而又纯的高低电位代表的数字,没有任何其他的东西。

 

2.       我们在电脑上看到的字符(小画片),如:,其实是电脑帮我们画出来的位图,他在计算机内部是16进制数字 BABA 。(gb2312

 

3.    电脑显示一个字符过程如下( for windows )

步骤1:文字首先以某种编码保存在文件中。

步骤2Windows将文件中的文字编码映射到Unicode。(通过codepage

步骤3Windows按照Unicode在字体文件中查找字体图像,画到窗口上。

 

4.       计算机中同一个数字,在不同的编码规则里,表示的是不同的符号,当一堆big5编码被当做系统缺省编码gbk来处理转换时,就得到了一堆没有意义的符号:乱码。需要指出的是:对人来说虽是乱码,但于计算机来说则操作上没有任何变化,都是转换,查表,画图。由上可鉴, Unicode 是十分必须的。在 Unicode 编码规则里,世界上所有文字都对应着一个独立的数字,不用再担心不同的编码规则导致的转换错误了。

 

5.       编码规则对编译器影响很大。因为编译器实质上就是把一个源文件的字符的二进制流转换成目标文件的机器指令二进制流。那么不同的编码规则规定的一个字符对应的二进制数是不同的,如ASCII 里所有字符占1个字节, “a”这个字符对应的是一个字节 0x61 , 那么编译器的词法分析器通过每次读一个字节这个动作就可以把一个个字符读进内存,然后通过与 数字0x61比较(别忘了在计算机内部一切都是数字)得出这个字符是否是我们人类认为的“a”。但如果源文件使用的是Unicode编码的话,所有的字符都占了2个字节,字符“a”对应着数字 0x0061 ,那么原先那个编译器的词法分析器再一次读进一个字节进行分析就不行了。所以一个新型的完全支持Unicode 的编译器,他肯定是按 Unicode 编码这一套而非 ASCII 编码那一套来进行词法分析的。

 

6.      最后再强调一下:内存中一样的二进制码,通过不同的编码规则,转换,查字体,得出不同的字符(图片),我们人类可以看出哪些是乱码,哪些是正常的,计算机不能,所以乱码这个概念是我们人类才有的。计算机内一样的东西,乱不乱码只是人类的感觉。

 

 

 

原创粉丝点击