【发布时间】:2014-08-10 04:57:12
【问题描述】:
给定特定字体的字形索引,我需要获取该字形的 Unicode 翻译。为了构建字形到 unicode 的翻译,我对整个 unicode 范围使用 GetGlyphIndices,并根据结果构建反向翻译(字形到 unicode 字符映射)。但是,这给了我单个字形到单个 unicode 字符之间的转换,例如,我可以看到在印地语中,两个 unicode 字符可以由一个字形表示。
例如,在单词 namaste (नमस्ते) 中有 6 个 unicode 字符由 5 个字形表示(中间的两个 unicode 字符由一个字形表示)。我可以通过附加到 notepad.exe、在 ExtTextOut 中插入断点并从记事本打印该单词来看到这一点。
有什么方法可以将字形转换为 unicode 字符串(以防字形表示多个 unicode 字符)?
【问题讨论】:
-
我已经在这里发布了一个答案,但我很好奇你为什么认为你需要这样做?您已经有输入的 Unicode;为什么需要从字形映射回它们?
-
感谢您的回答!我去看看资源。实际上我没有输入的 unicode,只有字形(我正在挂钩 ExtTextOut,并且从挂钩的函数中我想从给定的字形返回到 unicode 字符)
-
我很难理解您只能访问输出字形的情况。当然,在您的流程中的某个地方存在输入字符串(Unicode),即在上面的示例中,在流程的早期挂钩,在调用 ExtTextOut 之前获取输入字符串(lpString,cbCount)?也许您可以更详细地解释整个过程以及您的代码适合的位置?
-
这是真的,我也尝试过这种方法 - 但并非在所有情况下我都能理解输入字符串在何处转换为字形。根据 ExtTextOut 文档,字形是通过调用 GetCharacterPlacement 获得的。但是,当我调试应用程序(例如 IE、Chrome)时,我发现它们没有调用此函数,而且我不确定它们究竟是如何从 unicode 字符串中获取字形的。