Perl Unicode 烹饪书:Unicode 排序
℞ 35: Unicode 排序
排序——即使是纯ASCII——看起来很简单,至少如果你知道字母歌。但是,如果只是按照代码点排序,即使是这样简单的事情也会变得复杂。数字会出现在字母中间。你会得到“ZZZ”在“aaa”之前。还有更糟糕的问题。(例如,如何排序标点符号?)
排序 Unicode 数据 看起来 非常困难:每个字符的规则指定了它与其他字符的关系。这些 排序 规则指导数据在大小写敏感性、重音符号、字符宽度和其他 Unicode 属性方面的排序和比较。
基于代码点的简单排序无法产生有意义的字母顺序。有意义的排序必须遵守 Unicode 排序算法 (UCA)。CPAN 模块 Unicode::Collate 实现 UCA。它的简单用法是
use Unicode::Collate;
my $col = Unicode::Collate->new();
my @list = $col->sort(@old_list);
也可以查看来自 Unicode::Tussle
CPAN 模块的 ucsort 程序,以方便地使用该模块的命令行界面。
实际上,了解 UCA 的排序比简单的 ASCII 排序更好地处理 ASCII 文本,因为 UCA 考虑了数字、标点符号和其他非字母数字。
上一节: ℞ 34: Unicode 列宽用于打印
系列索引: 标准前缀
下一节: ℞ 36: 不区分大小写和重音的排序
标签
反馈
这篇文章有什么问题吗?通过在 GitHub 上打开问题或拉取请求来帮助我们。