【发布时间】:2016-09-20 21:45:18
【问题描述】:
我目前正在编写自己的支持表情符号的 DrawTextEx() 函数。使用此函数,每次在文本中找到表情符号时都会调用回调,从而使调用者有机会将包含表情符号的文本段替换为图像。例如,在文本中找到的 Unicode 字符 0x3DD8 0x00DE 将在绘制文本时被笑脸图像替换。其实这个功能很好用。
现在我想在调用方实现一个图像库。我在回调函数中收到一个像 0x3DD8 0x00DE 这样的文本段,我的想法是将此代码用作包含所有 Unicode 组合的映射中的键,每个组合都与包含要绘制的图像的结构链接。我在http://emojione.com/developers/ 网站上找到了一个不错的包。该站点上可用的所有软件包都包含多个文件名,即十六进制代码。所以我可以遍历包中包含的文件,并以自动方式创建我的地图。
但我发现这些代码是另一个标准的一部分,实际上是一组名为“HTML 实体”的项目,显然用于 Web 开发,如 http://graphemica.com/%F0%9F%98%80 网站上所见。因此,为了能够使用这些文件,我需要一个解决方案,将其名称中包含的 HTML 实体值转换为 UTF16 代码。比如上面提到的笑脸,我需要把0x1f600 HTML实体码转换成0x3DD8 0x00DE UTF16码。
蛮力方法可能包括编写一个转换这些代码的映射,方法是将它们中的每一个一个一个地添加到我的代码中。但由于 Unicode 标准在最乐观的情况下包含超过 1800 种表情符号组合,我想知道是否有一个现有的解决方案,例如已知的 API 或函数,我可以使用它来完成这项工作。还是有一个已知的技巧可以做到这一点? (例如“字符+('a' - 'A')”将大写字符转换为小写)
问候
【问题讨论】:
标签: html entity utf-16 emoticons chars