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

Mat*_*ren 3 c# localization string-comparison

谁能解释这种行为?

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

我知道可以通过指定来修复它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)
Run Code Online (Sandbox Code Playgroud)

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

Lar*_*ard 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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

对我来说似乎是一个错误.


小智 5

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

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