### 系统如何从字符集显示字体 在探讨系统如何从字符集显示字体之前,我们需要先理解几个关键概念:字符编码、字符集、字体以及它们之间的关系。在计算机科学领域,字符编码是一种将人类可读的字符转换为计算机能够识别的形式的过程。字符集则是一组特定的字符集合,例如ASCII或Unicode。而字体则是用来表示这些字符的具体样式。 #### 一、字符编码与字符集 - **字符编码**:如给定文件中的“D7 D6 B7 FB BA CD B1 E0 C2 EB”等十六进制数字,这实际上代表了一种特定的字符编码方式,用于表示某些特定字符。 - **字符集**:字符集是指一系列定义了字符编码规则的集合。例如,Big5字符集主要用于繁体中文环境,GBK字符集则用于简体中文环境。 #### 二、记事本读取文件过程 当记事本程序打开一个文本文件时,它首先读取文件中的内容,并尝试将其解释为文本。这一过程涉及多个步骤: 1. **读取文件内容**:记事本首先读取文件中的原始数据(例如十六进制数字)。 2. **转换为Unicode**:读取到的数据会被转换成一种通用的编码格式——Unicode。Unicode是一种广泛支持多种语言和字符集的编码标准,它为每一个字符分配了一个唯一的数字编码。 3. **查找字体图像**:一旦文本被转换为Unicode编码,系统就会根据该编码在字体文件中查找相应的字体图像。每个字符都有其对应的图像存储在字体文件中。 4. **显示字体**:找到字体图像后,这些图像会被渲染并显示在屏幕上,最终用户看到的就是可读的文本。 #### 三、CodePage与字符集转换 - **CodePage**:这是指一组特定的字符映射表,用于在不同的字符集之间进行转换。例如,CodePage 936对应于GBK字符集,而CodePage 950则对应于Big5字符集。 - **字符集转换**:当需要将文本从一种字符集转换到另一种字符集时,就需要通过CodePage来进行。例如,在从GBK到Unicode的转换过程中,系统会利用CodePage 936来实现这一转换。 #### 四、ANSI与Unicode编码 - **ANSI编码**:这是一种基于当前操作系统默认设置的编码方式,不同地区可能有不同的ANSI编码。例如,Windows在不同地区的默认编码可能不同,这取决于当地的语言环境。 - **Unicode编码**:这是一种统一的编码标准,能够支持世界上几乎所有语言的字符。Unicode通常有两种编码形式:UTF-8和UTF-16。其中UTF-16是Windows系统中常用的编码形式。 #### 五、其他相关概念 - **ISO8859系列**:这是一系列字符编码标准,主要针对拉丁语系的语言。例如,ISO8859-1主要适用于西欧国家,而ISO8859-2则适用于东欧国家。 - **UTF-7/UTF-8/UTF-16**:这些都是Unicode的编码方式,分别用于不同场景。例如,UTF-8由于兼容ASCII且编码效率高,在互联网上传输时更为常用;而UTF-16则是Windows系统中处理Unicode的标准方式。 字符编码、字符集和字体之间的关系紧密相连,它们共同构成了我们日常使用计算机时所见到的文字显示的基础。无论是开发人员还是普通用户,了解这些基本概念对于正确理解和使用文本数据都是非常重要的。
记事本从文件中读到的内容
记事本是用来打开文本文件的,所以它会调用Windows的文本显示函数将读到的数据作为文本显示
Windows首先将文本数据转换到它内部使用的编码格式:Unicode,然后按照文本的Unicode去字体文件中查找字体图像,最后将图像显示到窗口上
文字的显示应该是这样
步骤1:文字首先以某种编码保存在文件中。
步骤2:Windows将文件中的文字编码映射到Unicode。
步骤3:Windows按照Unicode在字体文件中查找字体图像,画到窗口上。
所谓编码就是用数字表示字符
Unicode也是一种文字编码,它的特殊性在于它是由国际组织设计,可以容纳全世界所有语言文字
如果上述3个步骤中任何一步发生了错误,文字就不能被正确显示
错误1:如果弄错了编码,例如将Big5编码的文字当作GBK编码,就会出现乱码
错误2:如果从特定编码到Unicode的映射发生错误,例如文本数据中出现该编码方案未定义的字符,Windows就会使用缺省字符,通常是?
错误3:如果当前字体不支持要显示的字符,Windows就会显示字体文件中的缺省图像:空白或方格
代码页和字符集
Windows的代码页
代码页(Code Page)是个古老的专业术语,据说是IBM公司首先使用的。代码页和字符集的含义基本相同,代码页规定了适用于特定地区的字符集合,和这些字符的编码。
可以将代码页理解为字符和字节数据的映射表。
Windows为自己支持的代码页都编了一个号码。例如代码页936就是简体中文 GBK,代码页950就是繁体中文 Big5。
代码页的概念比较简单,就是一个字符编码方案。但要说清楚Windows的ANSI代码页,就要从Windows的区域(Locale)说起了。
区域和ANSI代码页
- lixiaoyu01232013-02-04对于解释字符显示的原理上还可以,解释的还算清晰。
- 粉丝: 3
- 资源: 18
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Spring Boot和Vue的后台管理系统.zip
- 用于将 Power BI 嵌入到您的应用中的 JavaScript 库 查看文档网站和 Wiki 了解更多信息 .zip
- (源码)基于Arduino、Python和Web技术的太阳能监控数据管理系统.zip
- (源码)基于Arduino的CAN总线传感器与执行器通信系统.zip
- (源码)基于C++的智能电力系统通信协议实现.zip
- 用于 Java 的 JSON-RPC.zip
- 用 JavaScript 重新实现计算机科学.zip
- (源码)基于PythonOpenCVYOLOv5DeepSort的猕猴桃自动计数系统.zip
- 用 JavaScript 编写的贪吃蛇游戏 .zip
- (源码)基于ASP.NET Core的美术课程管理系统.zip