问题描述
我在处理高棉文本时遇到了一个有趣的问题。
文本“កើ”是 Unicode 中长度为 2 的字符串。有关字符代码,请参阅下面的剪辑。
let textBox = document.getElementById('textBox');
let info = document.getElementById('info');
let text = "កើ"
textBox.setAttribute('value',text);
info.innerHTML = "length: " + text.length + "<br>codes: " + text.split('').map(c => c.charCodeAt(0))
<input id="textBox" type="text" style="font-size:80px; width: 2em;"/>
<div id="info"></div>
文本渲染器似乎由三个字形组成这个文本,或者用连字替换这三个字符。到目前为止,这是异国情调,但并不意外。
令人费解的是:当我在 http://www.corvelsoftware.co.uk/crowbar/ 处使用 Khmer font from Google Fonts 将此文本键入 Crowbar 文本整形调试器时,可以看到这两个字符映射到三个字形。但是这两个字符似乎在映射之前就变成了三个字符。 6081号凭空出现。
我深入研究了字体文件的内部结构,在 cmap
表中只有一个子表,它将字符代码映射到 glpyh id。该表具有格式 4,这是非常标准的并且只允许一对一映射,因此在 cmap
处理期间没有插入额外的字形。
另外,如果只将两个原始字符代码映射到字形,结果文本看起来会有所不同,因此第三个字符似乎是必需的。
我在这里遗漏了将字符前的第三个字符添加到字形 ID 映射的哪一步?似乎对文本进行了一些我不知道的预处理。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)