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)
这是否与第一个代码段的行为相关联?
这里有一个说明问题的测试,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".
| 归档时间: |
|
| 查看次数: |
948 次 |
| 最近记录: |