为何U+0307 tittle可叠加在tittle上,却无法在带tittle的i、j上正常显示?
我尝试将字符串转换为「tittle大小写」(回应另一个可能存在拼写错误的问题)时,发现部分字符无法添加tittle。
tittle即上标点,是一种小型区分标记,比如小写i、j上方作为变音符号的点就属于tittle。
"上点"(即tittle)对应的UTF-8码位为U+0307。如果将tittle与本身已带有tittle的i或j组合,新增的tittle不可见(可能是因为它的位置刚好和这些字符自带的tittle重合)。但你可以给一个tittle再添加tittle(这看起来很奇怪,毕竟单个tittle无法给已有tittle的字符加标记)。此外,还有很多UTF-8码位(比如黑色上三角U+25B2)会导致tittle无法显示在其上方,本质上此时该码位就不再是tittle或上点了。
那么UTF-8的tittle不总是显示为上点的原因是什么?可能是变音符号可组合的码位范围存在限制,也可能是字体、HTML、浏览器渲染限制导致?下方代码片段演示了上述提到的各类tittle添加问题(我遇到该问题时浏览器默认字体为Times New Roman,因此片段中使用该字体,其他字体可能存在各类不同的渲染问题)。
担心该问题是重复问题的用户可以放心:我搜索了数千条tittle相关问题,意外没有找到任何能解答我疑问的内容。
更新
我最初没意识到,但想来应该很明显:字体选择完全决定了你能否给特定字符添加tittle(毕竟大多数字体仅能忠实渲染UTF-8码位的一个子集)。剩余的问题是,是否存在简单方法,可以判断特定字体下哪些字符可以和tittle这类变音符号或其他组合字符(combining characters)组合,从而提前预判你添加的tittle会显示为上点,而非位置错乱的点。
演示代码
CSS样式
div { font-family: "Times New Roman", serif; }
HTML代码
<div>i上方不可见的tittle: i̇</div> <div>tittle上叠加的可见tittle: ̇̇</div> <div>三角右侧未对齐的tittle: ▲̇</div> <div>双tittle实现i上方可见tittle: i̇̇</div>
内容的提问来源于stack exchange,提问作者benvc

