65.9K
CodeProject 正在变化。 阅读更多。
Home

KanjiFont

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.92/5 (9投票s)

2000年8月25日

viewsIcon

111744

downloadIcon

2992

在 unicode 和非 unicode 系统上显示中文和日文汉字

Sample Image - KanjiFont_Demo.jpg

引言

您可能知道,Windows 2000 和 Windows NT 本身就支持 Unicode,并且可以使用 Windows API 函数来显示和使用宽字符。 然而,这些 API 函数的行为在 NT 和 2000 之间并不总是完全相同。 此外,在 Windows 95 和 98 下,根本不支持 Unicode 字符函数。

这使得开发人员创建需要显示此类字符的应用程序非常令人沮丧。 最近,我需要为自己编写一个小型日语词典。 本文包含一组小型类,它们封装了一些简单的字符转换方法,以及用于在 Windows95/98/NT/2000 上可靠地显示 Unicode 字符的方法,以解决此问题。 我的代码基于 Glen Rosenthal 编写的 JWPce(一个非常棒的日语文本编辑器)的一些旧代码,以及一篇 MSDN 文章,其中有一些类似的解决方案的过时示例 (Q241020)。

基本上,所有 TrueType 字体都包含基于这些字体包含的字符的 Unicode 映射的编码表。 微软随 MS Office 和较新版本的 Internet Explorer 一起分发了一些大型字体,其中包含许多不同全球区域的字符或“字形”。 通常,当您调用 TextOutExtTextOut 函数时,设备上下文会将字符代码转换为系统区域设置的字形索引。 这在非 Unicode 版本的 Windows 上不起作用,并且在某些 Unicode 兼容系统的配置上也不起作用。 因此,为了在所有版本的 Windows 上显示您想要的字符,您必须计算您想要显示的字符代码在 true type 字体中的“字形”的索引。 然后,调用 ExtTextOut API 函数将允许您显示您选择的“字形”; 只要它存在于所选字体中即可。

这些类提供了一组简单的对象,可以轻松使用包含与您的系统区域设置无关的字形的 true type 字体,以及一些字符代码转换对象。 为了帮助调试,并且通常习惯于查看 Unicode 字符代码; 大多数程序员都习惯使用 ASCII。 我包含了一些 iostream 操作符,它们允许您轻松地将字符代码从一种编码格式转换为另一种编码格式。

如果您有任何增强功能或改进意见,请告诉我,可以在此处更新源代码。

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.