zoukankan      html  css  js  c++  java
  • 编码--文字输入的前因后果

    编码

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

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

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

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

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

    键盘码:有两种,一种比如说是鼠标的点击,对应的是操作系统的键值,另一种是转换为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?

     

  • 相关阅读:
    leetcode-Single Number
    设计模式六大原则(4)——接口隔离原则
    设计模式六大原则(3)——依赖倒置原则
    设计模式六大原则(2)——里氏替换原则
    设计模式六大原则(1)——单一职责原则
    观察者模式
    转:画图工具
    android 博客列表
    app crash率的标准
    查看某一个开发者代码修改量的脚本(ios平台可用)
  • 原文地址:https://www.cnblogs.com/jiangtu/p/6245264.html
Copyright © 2011-2022 走看看