gpt4 book ai didi

c# - 为什么 OrdinalIgnoreCase 和 InvariantCultureIgnoreCase 返回不同的结果?

转载 作者:可可西里 更新时间:2023-11-01 08:54:47 26 4
gpt4 key购买 nike

我认为 StringComparison.OrdinalIgnoreCaseStringComparison.InvariantCultureIgnoreCase 在涉及纯英文字符串时做同样的工作。但是,我正在处理的以下代码并非如此:

// Returns 0
string.Compare("877495169FA05B9D8639A0EBC42022338F7D2324","‎877495169fa05b9d8639a0ebc42022338f7d2324", StringComparison.InvariantCultureIgnoreCase)

// Returns -1
string.Compare("877495169FA05B9D8639A0EBC42022338F7D2324","‎877495169fa05b9d8639a0ebc42022338f7d2324", StringComparison.OrdinalIgnoreCase)

有什么特别的原因吗?

最佳答案

"‎877495169fa05b9d8639a0ebc42022338f7d2324"

听起来像是个骗人的问题。这个字符串的开头有一个额外的字符,在第一个数字 8 之前。它在浏览器中不可见。它是 U+200E,“从左到右的标记”。序数比较会看到那个字符,不变比较会忽略它。您可以通过在字符串上使用 ToCharArray() 来亲自查看它。

删除该字符串并粘贴此字符串,我从中删除了 U+200E:

"877495169fa05b9d8639a0ebc42022338f7d2324"

并且 Compare() 方法现在会像它应该的那样返回 0。请注意您现在正在使用的文本编辑器或 IME。 Unicode 不好玩吗?

关于c# - 为什么 OrdinalIgnoreCase 和 InvariantCultureIgnoreCase 返回不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15582315/

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