我正在尝试向串行端口 Web 应用程序添加功能,该应用程序可以将从
0x00
到 0xFF
的所有接收字节(包括通常不可打印的字符,例如 ASCII 控制代码)表示为单宽度可见字形。我创建了一种特殊的矢量字体(.woff2 格式),它具有分配给所有这些代码点的可见字形,如图所示:
我基本上已经让它工作了,但是,当尝试在网络应用程序的 HTML 中的 span 元素内显示这些内容时,有些无法正常工作,如下所示(这只是
0x00
,然后 0x01
,然后0x02
等):
一个例子是水平制表符,代码点
0x09
应在 [BS]
之后打印。浏览器没有显示 HT 字形,而是为选项卡插入空白(我认为由于 HTML 规则,最终会折叠成一个空格)。这是第一个向左箭头指示的空间。
如果重要的话,UI 由一个 span 元素组成,该元素的子文本通过调用
String.fromCharCode(0x09)
设置(这尤其适用于 HT 字符)。 CSS 将我的自定义字体分配给这个范围。
有没有办法阻止浏览器解释特殊的unicode代码点(例如水平制表符)并告诉它从字体渲染字形?
制表符在 CSS(空白)规则下转换为空格,而不是 HTML 规则,但即便如此,未转换的制表符字符仍意味着“前进到下一个制表位”,而不是“渲染字形”。
我认为 CSS 中没有任何东西可以控制这一点,但浏览器可以渲染完整的 Unicode 空间,而不仅仅是 0x00 到 0xFF,所以我建议您为每个接收到的字符添加 0xE000 偏移量,以便代码点现在位于Unicode 私人使用区。然后构建您的字体以将字形放置在该空间中。