在本文中,将探讨如何通过Unicode字符数据库中的UnicodeData.txt文件读取字符的名称。UnicodeData.txt文件是Unicode字符数据库的一部分,包含了字符的详细信息。虽然这个文件通常可以从Unicode联盟的官方网站下载,但本文提供的示例项目中也包含了该文件的副本。
为了更好地理解Unicode字符名称的读取过程,提供了一个演示应用程序。这个应用程序允许用户输入十进制或十六进制的代码点、输入字符或搜索字符名称。虽然这个应用程序对于浏览可用的名称非常有用,但如果要学习如何使用这些类本身,它就显得过于复杂了。
本文介绍的UnicodeNames类依赖于之前文章中描述的一些支持类。具体来说,它使用了Flexible CSV reader/writer with progress reporting中描述的CsvReader类,以及WPF TextBox with PreviewTextChanged event for filtering中描述的PreviewTextBox控件。要简单地使用本文描述的UnicodeNames类,不需要阅读其他文章。
UnicodeData.txt文件中有两个名称字段。位于该文件第二列的Name字段被优先使用。然而,对于控制字符,名称总是
此外,还有大量的代码点没有名称。然而,该范围有一个命名的起始和结束代码点。这两个代码点的名称分别以First和Last为后缀。UnicodeNames类将为这两个代码点之间的所有字符返回相同的名称(不带后缀)。这些代码点的示例(以十六进制表示)是100000(First),100001和10FFFD(Last)。所有这些都在
代码的使用非常简单。创建类的实例如下:
C# string path = "UnicodeData.txt";
UnicodeNames names = new UnicodeNames(path);
names.LoadFile();
获取字符的名称就像下面这样简单:
C# int codePoint = 10;
// LINE FEED (LF)
string name = names[codePoint];
当不再使用UnicodeNames实例时,也应该计划对其进行处理,如下所示:
C# names.Dispose();
最后,如果担心将文件加载到内存中所需的时间,有一些方法和属性可以轻松地与BackgroundWorker组件集成。RowEnd事件在每次读取文件的一行时触发。为了进一步帮助,ProgressPercentage属性描述了已加载文件的百分比。最后,CancelAsync方法可用于中止加载操作。