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

类读取 Unicode 字符名称以及显示/搜索工具

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2011 年 8 月 3 日

CPOL

3分钟阅读

viewsIcon

19805

downloadIcon

603

一个类读取 Unicode 字符名称以及一个显示/搜索工具。

UnicodeNames.png

引言

本文介绍了一个读取 Unicode 字符名称的类。 这些名称是从文件UnicodeData.txt读取的,该文件是构成Unicode 字符数据库的文件之一。 演示项目包含该文件的副本,但也可以从上述链接获取。

还提供了一个演示应用程序。 该应用程序允许用户输入十进制或十六进制代码点,键入字符或搜索字符名称。 虽然该应用程序对于浏览可用名称很有用,但对于学习如何使用类本身来说过于复杂。

背景

本文介绍的 UnicodeNames 类依赖于我在以前的文章中描述的一些支持类。 具体来说,它使用 具有进度报告功能的灵活 CSV 读/写器一文中描述的 CsvReader 类。 它还使用 用于过滤的具有 PreviewTextChanged 事件的 WPF TextBox一文中描述的 PreviewTextBox 控件。

要简单地使用本文中描述的 UnicodeNames 类,不需要阅读其他任何文章。

UnicodeNames.txt中有两个名称字段可用。 优先使用位于此文件第二列中的 Name 字段。 但是,对于控制字符,名称始终为<control>。 在这些情况下,当 Unicode_1_Name 可用时,将使用备用名称字段。

例如,代码点 10(十进制)的名称为 <control>Unicode_1_NameLINE FEED (LF)。 在这种情况下,将使用后者。

此外,还有大量的代码点没有名称。 但是,该范围具有命名的起始和结束代码点。 这两个代码点的名称分别带有后缀 FirstLast。 对于这两个代码点之间的所有字符,UnicodeNames 类将返回相同的名称(没有后缀)。

这些代码点的示例(以十六进制表示)为 100000 (First)、100001 和 10FFFD (Last)。 所有这些都在 <Plane 16 Private Use> 范围内。

Using the Code

该代码的使用不能再简单了。 创建该类的实例如下所示

string path = "UnicodeData.txt";
UnicodeNames names = new UnicodeNames(path);
names.LoadFile();

获取字符的名称就像以下内容一样简单

int codePoint = 10; // LINE FEED (LF)
string name = names[codePoint];

您还应该计划在使用完 UnicodeNames 实例后将其释放,如下所示

names.Dispose();

最后,如果您担心将文件加载到内存中所需的时间,可以使用一些方法和属性来轻松地与 BackgroundWorker 组件集成。

每次读取文件的一行时,都会引发 RowEnd 事件。 为了进一步帮助,ProgressPercentage 属性描述了已加载文件的百分比。 最后,可以使用 CancelAsync 方法中止加载操作。

关注点

这是我第一次全面进军 WPF 开发。 我确实作弊了一下,并使用 WinForms 的 AboutBox。 对于 WPF 纯粹主义者,我深表歉意。

历史

  • 2011 年 8 月 3 日 - 上传了原始版本。
© . All rights reserved.