尝试为.net使用ICU创建新的排序规则时出现异常

本文关键字:规则 排序 异常 net 使用 创建 ICU | 更新日期: 2023-09-27 18:18:45

尝试使用。net的ICU扩展创建新的排序:

var newCollation = Icu.Collation.Collator.Create("Cyrillic_General_CI_AS");

出现以下异常:

类型为"System"的未处理异常。ArgumentException'发生在其他信息:无法使用。创建排序器给定的localeId。这可能是因为ICU的数据文件创建时没有为此区域设置设置排序规则。您可以提供规则自己或替换数据dll。

尝试为.net使用ICU创建新的排序规则时出现异常

ru-RU-u-co-ks-level2没有预定义的排序器。您可以传递FallBackAllowed参数,以便返回到ru

Icu.Collation.Collator.Create("ru-RU-u-co-ks-level2", Collator.Fallback.FallbackAllowed)

或者按照异常消息所说的做,定义自己的排序规则。

您可以通过查看icu4c源代码树来查看预定义的排序器。

您提供的排序标识符是SQL Server使用的表单,但是ICU使用区域设置来标识排序。西里尔字母一般用于俄语,保加利亚语和许多其他使用西里尔字母的语言。CI表示大小写不敏感,AS表示重音敏感,因此我将使用区域设置ru-RU-u-co-ks-level2来获得类似的行为。