我想知道操作系统中的字符集和字体之间有什么区别吗?. 我知道字符集将字符集映射到它们的整数值,但是当字体进入场景时,我会感到模糊...... 我想知道它们是如何相关的?
2 回答
字符集是从无符号整数到抽象字符的映射。例如,在 Ascii 字符集中,数字 103(十进制;十六进制的 67)映射到拉丁小写字母 g。在逻辑层面上,字符集不必与计算机有任何关系(尽管该概念在信息技术中具有明显的实际相关性)
字体,在这个词的现代意义上,是用于将特定形状的字符渲染(显示)为特定字形的计算机代码。
在内部,字体使用字形索引,但也使用基于字符集的索引编号。当一种字体用于渲染字母 g 时,它在内部由其在字符集中的编号表示,并且该编号用于找出它在字体中的字形。即,字符编号映射到字形编号。(如果文本的字符集与字体编码中使用的字符集不同,则需要在此之前进行额外的字符集转换。)
这通常通过将字体描述为由字符编号索引的字形数组来简化:索引,例如 103,用于拾取第 103 个虚拟框,其中包含一个字形(对于字符 g)。虽然对获得基本概念很有用,但它确实过于简单化了。在许多字体中,字母 g 有两个或多个字形(例如单循环形式和双循环形式,或普通形式和小写大写形式),尽管其中一个是默认字形,其他需要使用特殊工具选择表格。
字体文件包含将字符(通过字符的“索引”)映射到可显示的矢量或位图数据的信息。阅读http://v1.jontangerine.com/log/2008/08/typeface--font以获得更好的概述。
字符集 - 参见例如http://www.iana.org/assignments/character-sets/character-sets.xml不涉及键盘,它是从索引(整数)到字符(概念,不是特定的字形)。
你描述的东西被命名为键盘映射(afaik)。
我认为这应该足以满足您的目的,如果您愿意,可以为您提供一些深入研究的指导。
更新 神奇的链条(可能有点朦胧,我没有研究它,请修复您发现的任何错误):
你按下键盘上的一个键——你触发了一个中断,这是一个关键事件。我不知道键盘和计算机之间的有线协议,但我猜它只是每个键一个字节,类似于 0..127 用于按键,-1..-128 用于按键。
您的操作系统从键盘接收中断并更新其内部状态,聚合信息,如按下 ctrl / shift / alt 修饰符,......您的键盘布局(keymap)和您使用的字符集的知识被考虑在内,所以你得到一个字符(例如“a”+“shift”->“A”的关键事件,这很容易。但你也可以输入像“Ä”这样的东西,它不包含在每个字符集中,也不包含每个键盘上)。现在您知道按下了哪个字符。但这不是你可以展示的东西——它只是一个概念(见下一步)。
如果没有热键处理程序或诸如此类的东西拦截您的键并且它通过您的应用程序,它需要知道要在屏幕或打印机上绘制什么。“A”并不完全一样,如果你拿两张手写的,它们看起来可能会有所不同。字体用于绘制或打印代表字符的东西——字符的图像。对于大多数用户和大多数程序,字体包括字符的外观、包含生成它的数据的文件以及所有变体,如常规、粗体、斜体、大写字母及其组合。
类型专家(我不是一个,只是一个爱好者)真的不喜欢这种缺乏区分。
字体是一系列字体变体(见上文),它们存储在包含字形(具有特定外观的字符)的描述性数据的字体文件中。字体还可能包含字距调整(字符之间的距离)、提示(关于如何以特定大小显示的细节)、替代(字母的替代字形)和连字(如何将一组字符组合成一个字形。不同的字体文件格式(truetype、open type、所有这些网络字体格式)具有不同的功能。
有一个分辨率的位图字体,如果它们没有显示在原始位图的倍数中,它们看起来很糊状。有包含对其轮廓的数学描述的矢量字体,可以缩放到您喜欢的任何分辨率,并且看起来仍然清晰(这就是提示可能很重要的地方。以及 cleartype、抗锯齿、亚像素抗锯齿)。
字体可以按外观分类:比例(“i”比“m”更细)vs等宽字体(每个字形都具有相同的宽度),sans serif vs serif。当它们具有某些相似性时,它们被归类为字体系列。怪诞,断裂,符号,签名,...
这就是我现在所拥有的一切,我可能没有把一切都做好。但这是一个开始。有关更多详细信息,请将任何粗体内容粘贴到您最喜欢的搜索引擎中。亲爱的读者,如果你发现了一个错误:我会很感激你的评论并将更新它。