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

问题描述 投票:0回答:2

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

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

发生以下异常:

icu.net.dll中发生未处理的“System.ArgumentException”类型的异常附加信息:无法使用给定的localeId创建collat​​or。这可能是因为ICU数据文件是在没有此区域设置的排序规则的情况下创建的。您可以自己提供规则或替换数据dll。

c# collation icu
2个回答
0
投票

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


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来查看预定义的合作者。

© www.soinside.com 2019 - 2024. All rights reserved.