我使用this answer中的方法从单词中删除特殊字符并将其更改为简单形式。这适用于许多基本口音,例如
Malmö becomes "Malmo"
München becomes "Munchen"
Åge becomes "Age"
但是,这并不适用于其他一些角色,例如:
Strømsgodset remains "Strømsgodset"
Kulħadd remains "Kulħadd"
有没有理由为什么这些角色不像其他角色那样被转换?
也有任何方法可以同样转换'组合'字符如:
æ -> ae
ẞ -> ss
答案 0 :(得分:2)
因为Unicode Consortium编写的Normalization chart没有您想要的分解,并且Microsoft使用该图表(或者更可能是该图表的文本版本,或者可能是该图表的旧版本) ,但这些都是细节。)
我不知道原因,因为我不是语言学家,但我确实希望Unicode联盟中有足够好的语言学家来做出正确的选择。
请注意,排序规则表与标准化表分开,因此您可以拥有:
int res = string.Compare("æ", "ae", CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace);
是0
...所以æ == ae
和ħ == h
您甚至可以IndexOf
使用整理:
int ix = CultureInfo.CurrentCulture.CompareInfo.IndexOf(
"Ad aeternitatem",
"æter",
CompareOptions.IgnoreNonSpace); // 3
并忽略大小写:
int ix = CultureInfo.CurrentCulture.CompareInfo.IndexOf(
"Ad Aeternitatem",
"æter",
CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase); // 3