【问题标题】:Asp.Net /C# when is Å equal to A? (and É equal to E)Asp.Net /C#什么时候Å等于A? (且 É 等于 E)
【发布时间】:2009-09-15 14:23:58
【问题描述】:

我在 alfabet 中寻呼国家,所以国家以 A-D、E-H 等开头。 但我也想在 a 中列出 åbrohw,在 e 中列出 ëpollewop。 我试过 string.startswith 提供一个 stringcompare 选项,但它不起作用......

我在 sv-SE 文化代码下运行,如果这很重要的话......

米歇尔

【问题讨论】:

  • “如何去除字符中的变音符号”不是更好的标题吗?只是建议,不要把一个好的标题修改成稍微好一点的东西。

标签: c# culture diacritics


【解决方案1】:

请参阅How do I remove diacritics (accents) from a string in .NET? 了解创建不带变音符号的版本的解决方案,您可以将其用于比较(同时仍显示带变音符号的版本)。

【讨论】:

    【解决方案2】:

    哦,是的,文化很重要。如果您运行以下命令:

    List<string> letters = new List<string>() { "Å", "B", "A" };
    
    Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("sv-SE");
    letters.Sort();
    Console.WriteLine("sv-SE:")
    letters.ForEach(s => Console.WriteLine(s));   
    
    Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-GB");
    letters.Sort();
    Console.WriteLine("en-GB:")
    letters.ForEach(s => Console.WriteLine(s));
    

    ...你会得到以下输出:

    sv-SE:
    A
    B
    Å
    en-GB:
    A
    Å
    B
    

    【讨论】:

    • +1 正如我要回答的那样 - 只需使用一种认为“A”和“Å”是同一个字母的文化。
    【解决方案3】:

    尝试使用范围选择而不是精确匹配。

    A: (firstLetter <= A)
    B: (firstLetter > A) AND (firstLetter <= B)
    ...
    

    【讨论】:

      【解决方案4】:

      您必须为排序提供特定的文化或为此编写自己的比较器。瑞典语的默认排序顺序将 å、ä、ö 放在末尾。

      您很可能希望分解带有变音符号的字母并对其进行排序,就好像它们没有变音符号一样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-26
        • 2010-10-19
        • 1970-01-01
        • 1970-01-01
        • 2021-01-19
        • 1970-01-01
        相关资源
        最近更新 更多