字符编码分析

Posted by ZMY on April 7, 2019

字符编码分析

 字符编码一直是个头疼的问题,通过对网上关于字符编码资料的查看与理解,现将自己的理解归纳如下(仅个人理解)。
 计算机中能识别的东西只有高低电平(高低电压),电路由各种继电器组成,高低电平的变化,会导致继电器的通断,而二进制0和1正好可以反映继电器的
两种状态通和断(高低电平),因此人们将计算机能识别的机器语言人为的定义为0和1。
 计算机最开始是老美发明的,用的是ascii编码,就是全英文这种,完全支持他们的键盘。无论是输入到内存还是保存到硬盘,中间涉及到的编码都是ascii编码后的二进制编码,ascii一共127位即7个二进制数即可搞定,01000001即是字母A在电脑里的数值,由A编译成01000001
 后来各个国家都用计算机,每个国家就都有了自己的编码系统,中国的如GBK,GB2312,GBK18030,台湾BIG5,日本Shift_JIS等编码陆续出现
 这样就带来一个问题,别的国家的文件怎么拿到自己国家的电脑上呈现出来呢?编码不一样,会带来很多问题。例如:假如韩文字符한국어—-》编码为10010001010,拿到中文字符集下,你解析不出来,你就变成了乱码????,你解析出来了,你可能解析成中国的哪个汉字了,岂不是很尴尬。
 再后来为了统一各国的编码就出现了unicode(万国码),各个国家的文字在unicode中都能找到,unicode收集了全世界的110多万个字符,并且最后可以达到20亿,每一个字符都对应一个unicode码值,这样各个国家只要都用unicode就完事了,但是unicode只是一个字符集。字符集都对应一个编码方式。由于早期考虑的比较少,采用UCS-4编码方式,这就导致一个字符占用4个字节,对于美国这种采用ascii这种编码方式的国家来说,是一种资源的浪费,因为人家一个字符就占用一个字节。为了节省空间,先后提出了提出了UTF-16,UTF-8编码。现在普遍采用UTF-8编码方案,使用UTF-8的好处是在采用是有英文字符的时候,默认采用ascii编码,即占用一个字节。通过将unicode码值转换成UTF-8编码,实现既能省空间,又能全照顾的方式运用于全世界的系统上。

 这里说一下汉字由键盘到屏幕呈现,字符的转换过程
 键盘输入字符a,按完a后,继电器通断导致电压的变化会转换几个二进制,这里假设为0001,触发中断,中断处理程序(一般会调用键盘驱动程序去读取这个扫描码),通过这个扫描码,对应扫描码和ASCII转换表,转换成ASCII编码,通过输入法软件转换成内码,比如按an1是中文字符”按”字,将这个转换成内码,比如55500,再在内存中通过page code表由操作系统将内码转换成unicode码,通过unicode表找到矢量图,呈现出来
 流程如下所示
用户—输入码—键盘—键盘扫描码—BIOS键盘驱动程序—-ASCII码—-((有的话)汉字输入软件—-汉字内码)—-unicode码—–矢量图—-显卡呈现