我的意思是,字体是否必须支持所有字符编码?还是字符编码必须支持所有字体?
Unicode 字体是什么意思?它们是否支持仅有的Unicode,而且它们不支持 windows-1252?
答案1
从基础开始,一切都基于 US-ASCII,这是一个 7 位代码,集合中有 128 个代码点,十六进制编号为 00 到 7F 或十进制编号为 0-127。这映射到控制代码、英文字母数字和基本标点符号
向 8 位代码(字节)添加 1 位,即可得到另外 128 个代码点或扩展 ASCII。
早期需要字符集/代码页来更改高 128 位中的代码点映射到字符的方式,以覆盖您希望表示的特定语言的字母表。这对于大多数西欧语言来说都相当有效。ISO 8859-1/Latin-1 就是这种字符集的一个例子。另一个是 Windows-1252,它对 ISO 8859-1 进行了更改,以帮助它覆盖更多或不同的字符。
具有更复杂字符集的语言(例如中文、日语和韩语)超出了 256 个代码点集的能力,并使用双字节代码来表示它们。
Unicode UTF-8 是一种多字节字符编码方案(1-4 个字节),其前 128 个字符向后兼容 ISO 8859-1/Latin-1。它有超过 100 万个代码点的空间,这意味着每个代码点实际上都可以代表一个字符,这与扩展 ASCII 的混乱不同,后者意味着代码点会根据字符集/代码页/编码映射到不同的字符。
字体是映射到代码点并以视觉方式表示字符的字形。字体的内容取决于它最初打算涵盖的语言。您可以使用字符映射表查看字体中包含哪些字形。
Unicode 字体不一定涵盖所有代码点,您需要了解它们的用途。例如,在 Windows 7 中,启动字符映射表并查看 Calibri 中的角色,然后将其与 Ebrima、Meiryo 和 Raavi 进行比较。请注意,它们有很大不同,因为每个角色都是针对不同的地理区域量身定制的。
至于 Unicode 字体和 Windows-1252 字符集,Windows 使用映射表将 Windows-1252 转换为 Unicode,当它与 ISO 8859-1 不匹配时,会出现“最佳拟合”情况,在这种情况下,Windows-1252 字符集中的某些字符可能无法显示。
答案2
字符集
字符集是字符的集合,每个字符都分配有一个数字。
众所周知的字符集是 ASCII。这是一组从 0 到 127 编号的 128 个字符。这些数字都可以用 7 位表示(因此它是一个 7 位字符集)
大多数但不是全部其他字符集包括具有相同编号的 ASCII 集。与 ASCII 不同的字符集示例包括 EBCDIC。ASCII 还存在欧洲变体,在某些位置有不同的字符(例如包括 £)
编码
大型字符集(如 Unicode)包含超过一百万个字符,每个字符需要三到四个字节来容纳分配给字符的大量数字。相反,它们使用允许将该数字“编码”为一个、两个、三个或更多字节的系统。使用 UTF-8 编码方案,与 ASCII 字符相同的字符恰好用单个字节进行编码,其字节值与 ASCII 中的相同。
在文件中存储文本时使用上述编码。
字体
字体是一组字符的视觉表示(即形状)的特定设计。这些形状称为字形。字体可能为一个字符(考虑“a”)有多个字形。它可能为成对的字符(称为连字)有字形(例如“ff”或“fi”)。因此,在字体中,为其设计字形的字符集通常与众所周知的字符集中的字符集不同(字体通常不包括 ASCII 控制字符的字形)。
字体
在计算机环境中,字体是指包含按照某种编号方案排序的字形的文件(该方案通常与任何知名字符集中的编号不同)。历史上,存在表示字体特定大小(以像素或点为单位)的位图字体。目前,大多数字体使用数学曲线来描述字形,因此可以缩放以表示任何大小的字体。
综合起来
当您显示文本文件时,必须告知计算机(或猜测)文件中使用的编码。然后,它将使用不同的编号(例如 Unicode 的 16 位变体)来表示内存中的文本,然后它将使用字体文件中的信息将内部表示映射到字体文件中使用的编号(编码)。
答案3
字体是否必须支持每个字符编码?
不。我不知道是否有人真的这样做。
这意味着它们会包含所有可以想象到的字符。我们用来支持西方文化编码(拉丁语)的最常见字体。
或者字符编码是否必须支持每种字体?
字符编码在某种程度上并不“支持”任何东西,所以这确实是一种错误的看待它的方式。
Unicode 字体是什么意思?它们是仅支持 Unicode 的字体,不支持 windows-1252 之类的字体吗?
统一码是一个标准(或者至少正在努力成为一个标准),它支持大量字符,因此使许多编码成为其自身的子集。Windows 1252 或 CP1252 是一种包含拉丁字符和一些中欧字符的编码。其中大多数也“涵盖”在 unicode 中。几乎所有 unicode 字体也涵盖 CP1252。