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

时间:2015-04-23 18:20:28

标签: c# string unicode startswith

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

它似乎适用于每个字符。用.Net 4.5尝试了这个代码,调试器没有破坏。

for (char i = char.MinValue; i < char.MaxValue; i++)
{
    if(!i.ToString().StartsWith("\u2d2d"))
    {
        Debugger.Break();
    }
}

1 个答案:

答案 0 :(得分:16)

我想我会试试。

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

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

  

字符串中使用的区分文化的排序和套管规则   比较取决于.NET Framework的版本。在.NET中   Framework 4.5在Windows 8操作系统上运行,排序,   大小写,规范化和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)