为什么string.StartsWith(“\ u2D2D”)总是返回true?

问题描述 投票:25回答:1

我正在摆弄C#中的解析,并发现对于我尝试的每一个字符串,string.StartsWith("\u2D2D")将返回true。这是为什么?

它似乎适用于每个char。用.Net 4.5尝试了这个代码,Debugger没有破解。

for (char i = char.MinValue; i < char.MaxValue; i++)
{
    if(!i.ToString().StartsWith("\u2d2d"))
    {
        Debugger.Break();
    }
}
c# string unicode startswith
1个回答
16
投票

我想我会试一试。

从我得到的是,U + 2D2D是在Unicode v6.1(source / source)中添加的。

.NET框架或本机调用支持较低版本:

字符串比较中使用的区分文化的排序和大小写规则取决于.NET Framework的版本。在Windows 8操作系统上运行的.NET Framework 4.5中,排序,大小写,规范化和Unicode字符信息符合Unicode 6.0标准。在其他操作系统上,它符合Unicode 5.0标准。 (source

因此,需要将其标记为可忽略的字符,其行为就像角色不在那里一样。

字符集包括可忽略字符,这些字符是在执行语言或文化敏感比较时不考虑的字符。 (source

例:

var culture = new CultureInfo("en-US");
int result = culture.CompareInfo.Compare("", "\u2D2D", CompareOptions.None);
Assert.AreEqual(0, result);

string.StartsWith使用类似的实现,但使用CompareInfo.IsPrefix(string, string, CompareOptions)代替。

© www.soinside.com 2019 - 2024. All rights reserved.