Unicode 我在哪里可以找到一个很好的字体介绍

Unicode 我在哪里可以找到一个很好的字体介绍,unicode,fonts,glyph,fontmetrics,Unicode,Fonts,Glyph,Fontmetrics,我必须写一些使用字体的代码。有一个很好的主题介绍让我开始吗?有一个非常好的主题介绍 我在这里复制了这篇文章,但是很多文章都依赖于特定的字体和图片,所以我强烈推荐上面的链接 我原本以为使用字体会很简单。然而,在Windward Reports(我们的XML和SQL报告系统)中,字体的正确处理是一项重要工作。如果你要做的不仅仅是在表单中放置一行文本,那么细节就开始起作用了 字体和字形 那么什么是字体呢?从根本上说,字体是一系列字形。你认为像字母a这样的字符是一个字形。然后,字体是该字体中所有字母的一

我必须写一些使用字体的代码。有一个很好的主题介绍让我开始吗?

有一个非常好的主题介绍

我在这里复制了这篇文章,但是很多文章都依赖于特定的字体和图片,所以我强烈推荐上面的链接

我原本以为使用字体会很简单。然而,在Windward Reports(我们的XML和SQL报告系统)中,字体的正确处理是一项重要工作。如果你要做的不仅仅是在表单中放置一行文本,那么细节就开始起作用了

字体和字形 那么什么是字体呢?从根本上说,字体是一系列字形。你认为像字母a这样的字符是一个字形。然后,字体是该字体中所有字母的一组字形。如果您使用Helvetica字体,则它们的所有标志符号看起来都是单向的。如果你使用泰晤士报的罗马字体,它们看起来就不同了。每个都是该字体的标志符号集

现在我们需要介绍代码页的概念。代码页是从字符编号到特定标志符号的映射。程序最初将每个字符存储为一个字节。对于亚洲字符集,有DBCS系统(一些字符是1字节,一些是2字节)。今天的程序大多使用Unicode,但网页往往是UTF-8,这是一个多字节序列,最多可以有4个字节

为什么要提到编码?因为每个字体都有一个编码,其中字符号178可能返回一个非常不同的字形,这取决于字体使用的代码页。大多数字体文件都使用Unicode,因此这里有一个标准,但许多程序仍然使用特定的代码页,其中该页映射到字体。这是显示ABC时发生的情况,字体为Wingdings,因此. 因此,第一点是您需要确保您使用的编码匹配或映射到您使用的字体编码

它变得更加复杂。值为0xE000–0xF8FF的字符未定义。每种字体都可以制作它们想要的任何东西(一个用途是添加克林贡脚本)。因此,根据定义,值在此范围内的字符与用于显示该字体的字体文件相关联。这就是大多数符号类型字体的工作原理

好的,你使用的是Unicode,你的字体文件使用Unicode,你给它传递一个字符串,然后…字符串显示为空。发生什么事?嗯,没有要求字体文件对任何给定字符都有字形。符号字体没有ABC。欧洲和美国使用的大多数字体没有中文、日文或韩文字形。使用字体没有的字形不是错误,但它将不显示任何内容,不是空白,而是不显示任何内容(即0点宽)

如果要显示代码页中不存在的glyph,则如果正在使用某个旧代码页,也会遇到类似的问题。在这种情况下,您需要映射到不同的代码页,至少对于该字符是这样的(Word就是这样处理这种情况的)

字体系列 字体分为几个不同的类别。首先是比例字体和单间距字体。在单间距字体中,所有字符的宽度完全相同。高度是一致的,因为所有小写字母的高度都与所有大写字母的高度相同。尽量避免使用单间距字体,因为它们更难阅读。亚洲字体几乎都是单间距的,因为汉字都有相同的宽度和高度,所以成比例是没有意义的。另一方面,希伯来语和阿拉伯语基本上是成比例的

其次是字体,它可以是衬线,在笔划的末尾可以得到东西;无衬线,在笔划的末尾不能得到任何额外的东西;装饰性的,远远超出正常范围;以及可以有任何随机的符号,包括与映射到字形的字符码的ASCII码匹配的条形码。这只是西欧字母表

Fontmetrics 现在我们开始测量字体,通过字体大多数(不是全部)是测量字形。字体的标准度量是点,虽然点的最初含义有很多历史,但对于计算机世界来说,它是72点==1英寸。您有时还会看到twip,它代表一个点的二十分之一,因此1440 twips==1英寸。我们现在有了电动车组,其中914400辆电动车组==1英寸(这里更多)。如果使用点,则需要使用浮点变量。Twips通常可以作为一个整数,而EMU则绝对可以

然后是字体点大小。这是一个完全任意的数字。把它想象成旧的CRT显示器的对角线大小,实际大小接近你的预期,但从来没有达到这个数字。点大小决定渲染图示符的大小,但在页面上没有特定的度量

现在这里是它开始变得有趣的地方,fontmetrics。首先,一切都必须从基线开始衡量。使用字体的任何其他部分都不起作用–您将遇到重大问题。从这里开始。基线上方的最高绘制部分为上升部分,基线下方的最低绘制部分为下降部分,两者均从基线测量

然后是两行文字之间的间距。这是一种字体设置,因为字体设计师确定该字体的适当间距。这可以以不同的方式返回,Windows将其视为下一行上方的间距,返回从基线到基线的度量值,而Java将其视为下一行之前一行下方的间距,并仅返回此值。此行距是在类似的单间距文本行之间放置的间距。如果间距大于单个间距,则添加到此值

您通常希望获得字体的高度,而不是显示字符串中的字形字符串的高度。为什么?因为什么