浏览器可以呈现存储在代码点 0x09 的字形吗?

Can the browser render a glyph stored at code point 0x09?

提问人:gbmhunter 提问时间:10/28/2023 更新时间:10/29/2023 访问量:32

问:

我正在尝试向串行端口 Web 应用程序添加功能,该应用程序可以将从 to 接收到的所有字节(包括通常不可打印的字符,例如 ASCII 控制代码)表示为单一宽度的可见字形。我创建了一种特殊的矢量字体(.woff2 格式),它为所有这些代码点分配了可见的字形,如下所示:0x000xFF

enter image description here

我大部分时间都让它工作,但是,当尝试在 Web 应用程序的 HTML 的 span 元素中显示这些元素时,有些无法正常工作,如下所示(这只是 、 、 、 等):0x000x010x02

enter image description here

一个例子是水平制表符,该代码点应打印在 .浏览器没有显示 HT 字形,而是为选项卡插入了空白(我认为由于 HTML 规则,它最终会折叠成一个空格)。这是第一个左箭头指示的空间。0x09[BS]

如果重要的话,UI 由一个 span 元素组成,该 span 的子文本通过调用来设置(这特别适用于 HT 字符)。CSS 将我的自定义字体分配给此范围。String.fromCharCode(0x09)

有没有办法防止浏览器解释特殊的 unicode 代码点(例如水平制表符),而只是告诉它从字体呈现字形?

HTML CSS 字体 ASCII 字形

评论


答:

2赞 Alohci 10/28/2023 #1

制表符根据 CSS(空格)规则转换为空格,而不是 HTML 规则,但即便如此,未转换的制表符字符将意味着“前进到下一个制表位”,而不是“呈现字形”。

我不认为CSS中有什么可以控制这一点,但是浏览器可以呈现完整的Unicode空间,而不仅仅是0x00到0xFF,所以我建议你为每个接收到的字符添加一个0xE000偏移量,以便代码点现在位于Unicode专用区域。然后构造字体以将字形放置在该空间中。

评论

0赞 gbmhunter 10/28/2023
谢谢!我不知道Unicode中的PUA范围,这听起来很适合我需要做的事情。
2赞 Mike 'Pomax' Kamermans 10/28/2023 #2

低于0x20的任何内容都是控制代码,而不是字形。即使您创建的字体的字形映射到相应的控制代码,也永远不会参考该字体:根据定义,控制代码由应用程序处理。

与其尝试使用真正的代码,不如在 PUA 范围内使用自定义字形创建字体,然后改用,因为这些是将参考字体的代码点。String.fromCharCode(0xE000 + yourActualValue)

(请注意,您必须为此使用 PUA,因为您正在为任何字符集中“不存在”的事物创建字形。没有“退格字形”或“传输结束字形”这样的东西,所以如果你想出这些东西本质上是图标的东西,这些只是特定于你的用例)。

评论

0赞 gbmhunter 10/28/2023
谢谢!我不知道Unicode中的PUA范围,这听起来很适合我需要做的事情。