字符串StartsWith()问题与丹麦文本

时间:2011-06-30 13:57:27

标签: c# localization string-comparison

任何人都可以解释这种行为吗?

var culture = new CultureInfo("da-DK");
Thread.CurrentThread.CurrentCulture = culture;
"daab".StartsWith("da"); //false

我知道可以通过指定StringComparison.InvariantCulture来修复它。但我只是对这种行为感到困惑。

我也知道丹麦不区分大小写的比较中“aA”和“AA”不一样,见http://msdn.microsoft.com/en-us/library/xk2wykcz.aspx。这解释了这个

String.Compare("aA", "AA", new CultureInfo("da-DK"), CompareOptions.IgnoreCase) // -1 (not equal)

这是否与第一个代码段的行为有关?

2 个答案:

答案 0 :(得分:6)

这里有一个说明问题的测试,daabogdåb(旧词和现代语言中的同一个词)意味着洗礼/洗礼。

public class can_handle_remnant_of_danish_language
{
    [Fact]
    public void daab_start_with_då()
    {
        var culture = new CultureInfo("da-DK"); Thread.CurrentThread.CurrentCulture = culture;
        Assert.True("daab".StartsWith("då")); // Fails
    }

    [Fact]
    public void daab_start_with_da()
    {
        var culture = new CultureInfo("da-DK"); Thread.CurrentThread.CurrentCulture = culture;
        Assert.True("daab".StartsWith("da")); // Fails
    }

    [Fact]
    public void daab_start_with_daa()
    {
        var culture = new CultureInfo("da-DK"); Thread.CurrentThread.CurrentCulture = culture;
        Assert.True("daab".StartsWith("daa")); // Succeeds
    }

    [Fact]
    public void dåb_start_with_daa()
    {
        var culture = new CultureInfo("da-DK"); Thread.CurrentThread.CurrentCulture = culture;
        Assert.True("dåb".StartsWith("daa")); // Fails
    }

    [Fact]
    public void dåb_start_with_da()
    {
        var culture = new CultureInfo("da-DK"); Thread.CurrentThread.CurrentCulture = culture;
        Assert.True("dåb".StartsWith("da")); // Fails
    }

    [Fact]
    public void dåb_start_with_då()
    {
        var culture = new CultureInfo("da-DK"); Thread.CurrentThread.CurrentCulture = culture;
        Assert.True("dåb".StartsWith("då")); // Succeeds
    }
}

所有上述测试都应该是我对语言的理解是成功的,而且我是丹麦语! 虽然我没有语法学位。 : - )

对我来说似乎是个错误。

答案 1 :(得分:5)

像Nappy说的那样,它是丹麦语的一个特征,其中“aa”和“å”仍然是相同的。丹麦还有另外两个字母,æ和ø,但我不确定它们是否也可以用两个字母书写。

我认为在第二个例子中,当“AA”变为“Å”时,“aA”不会改变。只是为了使事情更加混乱,“Aa”只有在使用不区分大小写的比较时才被认为等于“AA”和“aa”。