【问题标题】:HTML/CSS use DOS Codepage 437 font / missing glyphsHTML/CSS 使用 DOS 代码页 437 字体/缺少字形
【发布时间】:2015-08-02 06:40:08
【问题描述】:
我想在 HTML 网页上使用经典的 DOS Codepage437 字体。我已经包含了一个带有 CSS 的 *.ttf 文件,普通字母也可以。但是有一些缺失的字形被解释为控制字符(例如漂亮的 dos 风格的笑脸 :D 或日元符号)。如何强制浏览器显示例如ttf 文件的字形 0x0E?
见Link to example html file(源码中可以找到ttf文件)
它应该是这样的:
【问题讨论】:
标签:
html
css
ascii
font-face
codepages
【解决方案1】:
tl;dr:您不能在网页上使用 DOS 437 字符集。
一个问题是浏览器将数字字符引用解释为 Unicode 代码点。在您的示例页面中,È 始终表示 U+00C8 带有坟墓的拉丁大写字母 E。
现在您正在使用 U+00C8 恰好看起来像 ╚ 而不是 È 的字体,但这没关系。
或者更确切地说,它确实很重要,因为它只会造成混乱。你说,“正常的字母确实有效”,但它们不“有效”;它们只是显示出来,但结果不是您所期望的。
作为测试,尝试显示
ÔÕÖרÙÚ
使用您的字体。然后双击第一个字符,选择整个单词。您会看到只有前三个字符被选中,因为ÔÕÖ 是一个单词。 × 不是字母,因此不是单词的一部分,无论字体如何!
对于低于 32 的数字引用也是如此,例如 ,其中字体可能在该位置包含 ↓,但浏览器知道这是 Unicode U+0019 END OF MEDIUM,一个非打印字符。所以它不会被打印出来。
您的网页的另一个不相关的问题是您为字符集指定了UTF-8,而不是IBM437。
浏览器没有义务尊重不常见的代码页,所以如果你改变它,它就不会神奇地开始工作。此外,像 È 这样的数字引用仍然表示 Unicode 代码点 200,而不是字体中的第 200 个字形。
所以在这种情况下,你指定的字符集并没有太大的区别。
因此,解决方案是创建一种 Unicode 兼容字体,将字形映射到正确的代码点(╚ 位于代码点 U+255A,依此类推),并通过在HTML(╚ 或 ╚)。当然,也可以使用 UTF-8 并在编辑器中输入 ╚。