Fonts 识别任意文本中的外语字体

Fonts 识别任意文本中的外语字体,fonts,Fonts,一些背景:在Devanagari字体中,相同的字符代码可以直观地表示为不同的字符。在一种字体中,“10”可以直观地表示为“A”,而在另一种字体中,“10”可以直观地表示为“B”。因此,如果我选择文本并更改字体,那么字符也会更改。有趣的是,键盘上的按钮也是如此。在一种字体中按“A”将显示“A”,在另一种字体中按“A”将显示“B” 我想做的是,识别粘贴到我的软件中的某些文本中使用的字体,以便在更改字体时,我可以通过编程更改字符,使其与新字体的含义相同 对于非Unicode字体,实现这一点的唯一方法是

一些背景:在Devanagari字体中,相同的字符代码可以直观地表示为不同的字符。在一种字体中,“10”可以直观地表示为“A”,而在另一种字体中,“10”可以直观地表示为“B”。因此,如果我选择文本并更改字体,那么字符也会更改。有趣的是,键盘上的按钮也是如此。在一种字体中按“A”将显示“A”,在另一种字体中按“A”将显示“B”

我想做的是,识别粘贴到我的软件中的某些文本中使用的字体,以便在更改字体时,我可以通过编程更改字符,使其与新字体的含义相同


对于非Unicode字体,实现这一点的唯一方法是了解每种字体的映射。这是有问题的,因为即使存在,许多Devanagari/Hindi字体也会忽略它或进行修改和添加,从而导致出现上述情况(例如,一种字体中的“A”键可能对应于形状)म' 而另一种字体中的“A”的形状为क'...只是理论上的例子)

至少有一种方法可以帮助您,但最终归结为将输入字体特定的编码转换为输出字体特定的编码。如果每个特定于字体的映射都有一个特定于字体的Unicode映射,则可以使用Unicode作为中介,并将其转换为任何字体的方案,例如:

font         font-specific code    Unicode
----         ------------------    -------
MyFont       0001                  U+0021
MyFont       0002                  U+0022
...
MyOtherFont  00F1                  U+0021
MyOtherFont  00F2                  U+0022
...
有了这些映射的完整数据库,您可以非常轻松地将“MyFont”中的文本集转换为“MyOtherFont”的文本


当然,如果可能的话,最好的替代方案是将字体和文本都转换为Unicode,但是……这可能是不可能的。

你说的是非Unicode Devanagari字体吗?我不明白,如果字体是用Unicode编码的,为什么会出现这个问题。我可以肯定地看到,对于旧式的非Unicode Devanagari字体来说,这可能是一个问题。是的,非Unicode devnagri fontsI最终使用了一些启发式/统计分布来首先猜测文本使用的字体(根据已知样本的加权频率),然后将其转换为Unicode。还有很长的路要走,我需要收集大量已知的样本,以获得准确度。