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

时间:2014-08-20 11:36:44

标签: c# collation icu

尝试使用ICU extension for .NET创建新的排序规则:

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

发生以下异常:

  

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

2 个答案:

答案 0 :(得分:0)

您提供的排序规则标识符是SQL Server使用的表单,但ICU使用locale标识排序规则。 Cyrillic General由俄语,保加利亚语和许多其他使用西里尔文字的语言使用。 CI表示不区分大小写,AS表示重音敏感,所以我会使用locale ru-RU - u-co-ks-level2来获得类似的行为。

答案 1 :(得分:0)

没有用于 ru-RU-u-co-ks-level2 的预定义整理程序。您可以传递 FallBackAllowed 参数,以使其回退到 ru

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

或者按照异常消息中的说明进行操作,并定义自己的整理规则。

通过查看icu4c source tree可以看到预定义的整理者。