gpt4 book ai didi

c# - 为什么 "\u1FFF:foo".StartsWith (":") 返回 true?

转载 作者:太空狗 更新时间:2023-10-29 18:26:26 30 4
gpt4 key购买 nike

字符串 "\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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com