编码--文字输入的前因后果

编码

首先,编码的定义是:信息从一种形式或格式转换为另一种形式的过程。(百度百科)

下面粗略的从两个方面讲下编码的作用:

人和计算机的信息交换:人输入信息的方式有多种,比如说 语音,视频,文字等等,但是计算机只认识二进制,那么问题就来了,如何 翻译 给计算机呢?以 文字 举例,用户输入分为以下阶段:

输入——>汉字键盘码——>汉字交换码——>汉字内部码——>汉字地址码——>汉字字形码——>输出。

下面大概讲下这几个步骤。

键盘码:有两种,一种比如说是鼠标的点击,对应的是操作系统的键值,另一种是转换为ascii码。过程如下:

用户——>输入码/汉字输入码(比如说五笔,拼音等等(也符合编码的概念--))——>键盘——>键盘扫描码——>BIOS键盘驱动程序——>操作系统——>程序消息(这里我有个问题,就是bios传递给操作系统的信息格式是什么样子的,肯定不是ascii码,因为没有田字格的ascii码。估计也有一种格式--)

然后交换码内部码,就是这次我们讲的重点:字符编码。

这里讲下,交换码,也就是我们所说的编码集。比如说, GB2312全称就是 《信息交换用汉字编码字符集·基本集》,而字符集和编码集,就是为了实现将输入的文字转换为计算机识别的二进制格式:内部码。

下面明确一个概念,字符集 和 编码集

所谓字符集,是指:一个文字系统所支持的所有抽象字符的集合。

所谓编码集,是指:将字符集转换为计算机可接受的形式的信息,(this is 编码)

比如说unicode是字符集,ascii既是编码集,也是字符集,而utf-8则是编码集。具体大家可以取查下utf-8,GBK,这是用的比较多的两种编码集。

想要深入了解的话,推荐做一个编码识别的程序:随便找一个网页,可以判断其编码。做法大概是 根据每个字节大小判断其编码,再根据全文占比率判断整体编码

最后,汉字地址码和字形码涉及到的是汉字的显示问题,比如点阵显示,矢量显示,实现后就是我们看到的各种字体了。粗略讲下:

用点阵表示字型时,汉字字型码指的是这个汉字字型点阵的代码。根据输出汉字的要求不同,点阵的多少也不同。简易型汉字为16*16点阵,提高型汉字为24*24点阵,32*32点阵,48*48点阵等等,

矢量表示方式存储的是描述汉字字型的轮廓特征,当要输出汉字时,通过计算机的计算,由汉字字型描述生成所需大小和形状的汉字点阵。矢量化字型描述与最终文字显示的大小,分辨率无关,因此可以产生高质量的汉字输出。Windows中使用的TrueType技术就是汉字的矢量表示方式。

(来自百度百科)

此处还有些知识点,比如apple的边缘模糊技术,就不细讲了。有兴趣的同学可以自行了解。估计是图形学方面的知识。留待以后感兴趣了再细看。

 

计算机和计算机的信息交换:这个就不多讲了,其实就是使用内部码传递信息。

这里有一个坑点,就是早期网关(硬件)采用7bit位传输(这里就有个问题了,如果早期网关是第一个bit位做奇偶校验呢,还是由于网关的某些原因只接受7位数据划分呢)。为了解决这个问题,诞生了后来的base64。有兴趣了解的可以看下链接。

有相关兴趣的同学可以研究下 中文信息处理 这门课,以及可以自己动手做下demo

 

 

有一些有意思的问题可以考虑下:

Why 1B==8bit

字符集和编码集区别

用户A输入信息到用户B显示信息的过程。

 

一些比较有意思的,或者相关的链接

UTF-8 GBK UTF8 GB2312 之间的区别和关系

base64相关

WHY IS A BYTE 8 BITS? OR IS IT?

 

 

posted @ 2017-01-03 16:08  thought  阅读(529)  评论(0编辑  收藏  举报