为什么我从.NET的StartsWith中看到这种意外行为?
这一定是.NET漏洞,对吗?
"KonNy".StartsWith("Kon")
返回false,而"KonNy".StartsWith("Ko")
和"KonN".StartsWith("Kon")
返回true。
这里有什么我想念的吗?
重复评论:
我并不特别了解.NET,但我怀疑如果StartsWith
遵循整理,其中nny
是单个字母,例如匈牙利语,我可能会观察到这种现象。 如果我是对的,如果你将整理改为中性,你的“虫子”就会消失。 🙂
编辑:这是一个文化敏感问题,只在匈牙利文化中显示。 摄制:
using System; using System.Globalization; class Test { static void Main() { foreach (var culture in CultureInfo.GetCultures(CultureTypes.AllCultures)) { if (!"KonNy".StartsWith("Kon", false, culture)) { Console.WriteLine(culture); } } } }
输出:
hu hu-HU
如果您想要对文化不敏感的比较,请根据usr的答案指定StringComparison.Ordinal
。
我怀疑你的字符串中有一些零宽度或不可打印的字符。 Unicode字符空间包含一些令人讨厌的,不直观的惊喜。 尝试在字符串文字上调用ToCharArray并检查生成的字符代码。
并尝试使用StringComparison.Ordinal调用StartWith以确保您的文化不会干扰。