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





0/5 (0投票)
一个类读取 Unicode 字符名称以及一个显示/搜索工具。
引言
本文介绍了一个读取 Unicode 字符名称的类。 这些名称是从文件UnicodeData.txt读取的,该文件是构成Unicode 字符数据库的文件之一。 演示项目包含该文件的副本,但也可以从上述链接获取。
还提供了一个演示应用程序。 该应用程序允许用户输入十进制或十六进制代码点,键入字符或搜索字符名称。 虽然该应用程序对于浏览可用名称很有用,但对于学习如何使用类本身来说过于复杂。
背景
本文介绍的 UnicodeNames
类依赖于我在以前的文章中描述的一些支持类。 具体来说,它使用 具有进度报告功能的灵活 CSV 读/写器一文中描述的 CsvReader
类。 它还使用 用于过滤的具有 PreviewTextChanged 事件的 WPF TextBox一文中描述的 PreviewTextBox
控件。
要简单地使用本文中描述的 UnicodeNames
类,不需要阅读其他任何文章。
UnicodeNames.txt中有两个名称字段可用。 优先使用位于此文件第二列中的 Name
字段。 但是,对于控制字符,名称始终为<control>
。 在这些情况下,当 Unicode_1_Name
可用时,将使用备用名称字段。
例如,代码点 10(十进制)的名称为 <control>
,Unicode_1_Name
为 LINE FEED (LF)
。 在这种情况下,将使用后者。
此外,还有大量的代码点没有名称。 但是,该范围具有命名的起始和结束代码点。 这两个代码点的名称分别带有后缀 First
和 Last
。 对于这两个代码点之间的所有字符,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 日 - 上传了原始版本。