我正在摆弄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();
}
}
我想我会试一试。
从我得到的是,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)
代替。