pry*_*ain 25 c# string unicode startswith
我正在摆弄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();
}
}
Run Code Online (Sandbox Code Playgroud)
Car*_*iel 16
我想我会试一试.
从我得到的是,U + 2D2D是在Unicode v6.1(源/源)中添加的.
.NET框架或本机调用支持较低版本:
字符串比较中使用的区分文化的排序和大小写规则取决于.NET Framework的版本.在Windows 8操作系统上运行的.NET Framework 4.5中,排序,大小写,规范化和Unicode字符信息符合Unicode 6.0标准.在其他操作系统上,它符合Unicode 5.0标准.(来源)
因此,需要将其标记为可忽略的字符,其行为就像角色不在那里一样.
字符集包括可忽略字符,这些字符是在执行语言或文化敏感比较时不考虑的字符.(来源)
例:
var culture = new CultureInfo("en-US");
int result = culture.CompareInfo.Compare("", "\u2D2D", CompareOptions.None);
Assert.AreEqual(0, result);
Run Code Online (Sandbox Code Playgroud)
string.StartsWith使用类似的实现,但CompareInfo.IsPrefix(string, string, CompareOptions)改为使用.