计算机汉字编码转换过程介绍

计算机汉字编码转换过程介绍 计算机汉字编码转换过程介绍本文用用通俗清晰的语言完整讲解汉字从键盘输入、二进制存储到屏幕显示的全流程帮助初学者建立正确的字符编码认知理解计算机处理中文的底层原理是学习计算机基础、编程与文本处理的入门资料。概述计算机硬件只能表示“01”的逻辑概念无法直接表示图片以及文字所以我们需要一定的转换过程。接下来我们来看下一个文字从“输入-转码存储-输出显示/打印”的简单流程。首先我们知道计算机是美国人发明的规则是美国人定的键盘上的按键也都是英文字母所以编号不是你想怎么分配就怎么分配。对于英文字母的输入键盘按键产生的扫描码经操作系统映射后得到 ASCII 码存储字符 ‘A’ 的 ASCII 码 65二进制 01000001。但是对于汉字输入就不是这么回事了键盘上可没有汉字对应的输入按键我们不可能直接敲出汉字字符。于是就有了输入码、机内码、字形码的转换关系输入码帮助我们把英文键盘按键转换成汉字字符机内码帮助我们把汉字字符转换成二进制序列字形码帮助我们把二进制序列输出到显示器成像。输入码我们模拟下汉字的输入过程。以汉字“你好”为例首先打开txt文本敲下“nihao”的拼音字母然后输入栏会弹出多个符合条件的汉字词组最后我们会选择相应的编号就能实现汉字的输入。那这过程又是如何实现的呢计算机领域有一句如同摩西十诫般的神圣哲言“计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决”。这里我们再加一层按键字母组合和汉字的映射表好比英汉字典这层我们称为输入码输入码到内码的过程就是一次查表转换操作比如“nihao”这几个ASCII字符大家可以随便修改映射表以及候选编号我可以把他映射成“你好”如下图所示。机内码机内码也称内码是字符编码最核心的部分。机内码是字符集在计算机中实际存储、交换、通信使用的二进制编码通过内码我们可以达到高效率的存储、传输文本的目的。我们的外码输入码实现了键盘按键和字符的映射转换但是机内码是让字符真正变成了机器能读懂的二进制语言。文本编码文本由字符 组成字母、汉字、数字、标点字符是离散的、有限的因此文本编码的核心逻辑是给每个字符分配一个唯一的二进制编号编码建立 字符→二进制 的字典映射。【二进制两个核心单位这是理解数据存储的基础比特bit小写 b二进制的最小单位只能表示 0 或 1是数据的 “最小原子”。字节byte大写 B8 个比特组成 1 个字节是“存储介质和文件系统”的基本单位。】早期编码是ASCII仅支持英文。计算机诞生初期仅用于处理英文因此 1963 年制定了ASCII 编码美国信息交换标准代码用1 个字节8bit 表示 1 个字符仅使用低 7 位0-127共 128 个字符包含大小写字母A-Z、a-z、数字0-9、标点符号、控制字符如换行、回车举例字符 A → ASCII 编码65 → 二进制01000001字符 0 → ASCII 编码48 → 二进制00110000字符 换行 → ASCII 编码10 → 二进制00001010。ASCII 编码简单高效但仅支持英文无法表示汉字、日文、韩文等非英文字符------ 这显然无法满足全球化的需求于是 Unicode 应运而生。现代编码UnicodeUTF-8Unicode全球字符的 唯一编号表Unicode统一码的核心目标是给世界上所有语言的字符汉字、英文、日文、符号等分配一个唯一的数字编号码点彻底解决多语言兼容问题编号范围0-0x10FFFF可容纳超过 110 万个字符覆盖全球所有已知文字表示格式UXXXXXXXX 为十六进制举例汉字 你 → Unicode 码点U4F60汉字 好 → Unicode 码点U597D字母 A → Unicode 码点U0041与 ASCII 兼容。Unicode 只负责给字符分配唯一编号 不规定这个编号如何转换成二进制字节序列------ 这就是 UTF-8 的作用。UTF-8Unicode 的 二进制翻译规则最主流UTF-8 是目前互联网和操作系统默认的文本编码格式 全称 8 位 Unicode 转换格式核心特点变长编码1-4 个字节、兼容 ASCII、节省空间。编码规则通俗版系统集成服务编号≤127ASCII 字符U0000–U007F1 个字节二进制首位为 0与 ASCII 完全兼容128 编号≤2047U0080–U07FF2 个字节二进制首位为 110、102048 编号≤65535U0800–UFFFF3 个字节二进制首位为 1110、10、10第一字节前4位为1110后续字节前2位为10。汉字常用编号 65535U10000–U10FFFF4 个字节二进制首位为 11110、10、10、10。举例汉字 你U4F60十进制 20320编号 20320 在 2048-65535 之间 → 用 3 个字节转换为二进制100111101100000按 UTF-8 规则拼接11100100 10111101 10100000最终汉字 你 的 UTF-8 编码为0xE4 0xBD 0xA0十六进制对应二进制 3 个字节。文本编码完整流程一句话总结字符 → Unicode 码点 → UTF-8 编码 → 二进制字节序列 → 存储到硬盘 / 内存 。比如输入 你好你U4F60→ UTF-811100100 10111101 10100000好U597D→ UTF-811100101 10110111 10011101最终存储为6 个字节的二进制数据。在现代操作系统和互联网中UTF-8编码通常就扮演了机内码的角色。【在现代计算机体系尤其是互联网和Windows/Linux/macOS通用环境中UTF-8 就是事实上的“机内码”。但在早期的中文Windows系统如代码页936中“机内码”有时特指GBK等双字节编码。】字形码计算机中的字符都是以内码的二进制形式表示我们怎么把数字对应的字符在显示器上显示出来呢这就需要依赖字形码字形码本质上是一个n*n 的像素点阵通常用 1 表示笔划点0 表示背景每一个字符的字形都是预先存放在计算机内而这样的字形信息库我们称为字库。比如中文“你”的点阵图这样一个 16*16 的像素矩阵需要 16 * 16 / 8 32 字节的空间来表示右边的字模信息称为字形码。不同的字库如宋体、黑体对同一个字符的字形编码是不同的。所以字符编码到显示的字形码其实又是另一张查找表也就是字符编码-字形码的映射关系表。需要注意的是现代计算机系统中字形码的存储形式已经从“点阵”进化为了“矢量轮廓数据”。现代计算机系统中为了显示平滑、可任意缩放的文字字库普遍采用矢量字形如 TrueType、OpenType而非传统的点阵字模。矢量字形通过数学曲线描述字符轮廓在显示时动态栅格化因此比点阵字模更节省存储空间且缩放不失真。矢量字形是把文字的形状用数学公式存储需要显示时再根据尺寸计算出像素因此无限缩放不失真是现代操作系统、打印机、网页的默认字体技术。附录、计算机是如何输入存储输出汉字、图片、音频、视频的 https://blog.csdn.net/cnds123/article/details/142854581