探索Unicode字符数据库:从UnicodeData.txt文件中读取字符名称

在本文中,将探讨如何通过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字段被优先使用。然而,对于控制字符,名称总是。在这些情况下,如果可用,将使用备用名称字段Unicode_1_Name。例如,代码点10(十进制)的名称是,Unicode_1_Name是LINE FEED (LF)。在这种情况下,将使用后者。

此外,还有大量的代码点没有名称。然而,该范围有一个命名的起始和结束代码点。这两个代码点的名称分别以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方法可用于中止加载操作。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485