我想在 HTML 网页上使用经典的 DOS Codepage437 字体。我已经包含了一个带有 CSS 的 *.ttf 文件,普通字母也能正常工作。但是有一些缺失的字形,它们被解释为控制字符(例如漂亮的 DOS 风格的笑脸 :D 或中国日元符号)。我怎样才能强制浏览器显示例如ttf文件的字形0x0E?
参见 Link to example html file (ttf文件可以在源码中找到)
它应该是这样的:
最佳答案
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 并在编辑器中输入 ╚
。
关于HTML/CSS 使用 DOS 代码页 437 字体/缺少字形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30359451/