我正在摆弄C#中的解析,发现对于我尝试的每一个字符串,string.StartsWith("\u2D2D")
将返回true。那是为什么?
它似乎适用于每个字符。用.Net 4.5尝试了这个代码,调试器没有破坏。
for (char i = char.MinValue; i < char.MaxValue; i++)
{
if(!i.ToString().StartsWith("\u2d2d"))
{
Debugger.Break();
}
}
答案 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)
。