字符串"\u1FFF:foo"
以\u1FFF
(或“”)开头,对吗?
那么,这两者怎么都成立呢?
"\u1FFF:foo".StartsWith(":") // equals true
"\u1FFF:foo".StartsWith("\u1FFF") // equals true
// alternatively, the same:
":foo".StartsWith(":") // equals true
":foo".StartsWith("") // equals true
.NET是否声称此字符串以两个不同的字符开头?
而且,尽管我觉得这很令人惊讶并且想了解“为什么”,但我同样对如何强制.NET强制仅通过代码点进行搜索感兴趣(使用
InvariantCulture
似乎无济于事)?为了进行比较,以下一个字符
"\u1FFE:foo".StartsWith(":")
返回false。 最佳答案
通常,可以将一个字符串视为以两个不同的字符串开头,而这两个不同的字符串不是逐字节相同的,这并不奇怪(因为Unicode很复杂)。例如,这些结果几乎总是可以反射(reflect)用户的需求:
"n\u0303".StartsWith("\u00f1") // true
"n\u0303".StartsWith("n") // false
使用
System.Globalization.CharUnicodeInfo.GetUnicodeCategory
,您可以看到'\u1fff'
在“OtherNotAssigned”类别中;我不清楚这是否会影响字符串搜索/排序/比较操作(它似乎不影响规范化,即规范化后仍保留字符)。如果要逐字节比较,请使用
StringComparison.Ordinal
。关于c# - 为什么 "\u1FFF:foo".StartsWith (":")返回true?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47209888/