gpt4 book ai didi

c# - Culture-Invariant 区分大小写的字符串比较在不同的机器上返回不同的结果

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

我发现我的机器和构建服务器上的测试结果不同。我设法找到了不同的单行。这是一个字符串比较。这两个字符串的第一个字符不同。

下面的测试在我的本地机器上通过了,但在构建机器上失败了。

[TestClass]
public class Tests
{
[TestMethod]
public void Strings()
{
Assert.IsFalse(0 == string.Compare("Term’s", "term’s", false, CultureInfo.InvariantCulture));
}
}

我还尝试将其更改为 string.Equals:

string.Equals("Term’s", "term’s", StringComparison.InvariantCulture);

string.Equals 在构建服务器上返回 true,在我的本地机器上返回 false。

顺序比较在两台机器上给出相同的结果:

string.Compare("Term’s", "term’s", StringComparison.Ordinal))

据我了解,InvariantCulture 应该在任何地方返回相同的结果。区分大小写的文化不变字符串比较如何依赖于机器?我应该检查哪些设置来确定问题?

更新:平台和字符串

字符串很重要。对于带有“异国情调”标点符号的字符串,如 RIGHT SINGLE QUOTATION MARK,可以观察到这些结果或 RIGHT DOUBLE QUOTATION MARK

似乎该行为在 Windows 8 机器上重现。您甚至可以在 https://dotnetfiddle.net/ 上看到它如果您键入以下内容:

using System;
using System.Globalization;

public class Program
{
public static void Main()
{
Console.WriteLine(0 == string.Compare("Terms", "terms", false, CultureInfo.InvariantCulture));
Console.WriteLine(0 == string.Compare("Term’s", "term’s", false, CultureInfo.InvariantCulture));
Console.WriteLine(0 == string.Compare("Term“s", "term“s", false, CultureInfo.InvariantCulture));
Console.WriteLine(0 == string.Compare("Term”s", "term”s", false, CultureInfo.InvariantCulture));

//outputs
//False
//True
//True
//True
}
}

Environment.OSVersion(服务器的):Microsoft Windows NT 6.2.9200.0
Environment.Is64BitOperatingSystem(服务器的):True
Environment.Version(服务器的)4.0.30319.18449

Environment.OSVersion(本地):Microsoft Windows NT 6.1.7601 Service Pack 1
Environment.Is64BitOperatingSystem(本地):True
环境版本(本地):4.0.30319.18444

更新:相关MSDN论坛链接

这可能是 Windows 8 中的一个已知错误,已在 Windows 8.1 中修复。

http://social.msdn.microsoft.com/Forums/vstudio/en-US/4a1ab6b7-6dcc-46bf-8650-e0d9ebbf1735/stringcompare-not-always-casesensitive-on-windows-8?forum=netfxbcl

最佳答案

不幸的是,InvariantCulture 仍然是一种语言比较,因此它在操作系统版本之间可能会有所不同(并且确实会有所不同,尤其是当新字符添加到 Unicode 时)。 4.0 之前的 .Net 版本带有自己的数据有效载荷,因此不会发生变化,但从那时起,它们从操作系统中获取数据,并且可能会发生变化。序数是唯一不会改变的比较,如果您想要稳定性,这是您真正需要做的。

也就是说,您不应该看到所提供代码的行为差异。您观察到的差异是由于 Windows 8 的错误导致的,该错误已在 Windows 8.1 中修复。

关于c# - Culture-Invariant 区分大小写的字符串比较在不同的机器上返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25727349/

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