为什么一些变音符号被剥夺了?

时间:2015-05-08 13:26:38

标签: .net string diacritics

我使用this answer中的方法从单词中删除特殊字符并将其更改为简单形式。这适用于许多基本口音,例如

Malmö becomes "Malmo"
München becomes "Munchen"
Åge becomes "Age"

但是,这并不适用于其他一些角色,例如:

Strømsgodset remains "Strømsgodset"
Kulħadd remains "Kulħadd"

有没有理由为什么这些角色不像其他角色那样被转换?

也有任何方法可以同样转换'组合'字符如:

æ -> ae
ẞ -> ss

1 个答案:

答案 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