小编fil*_*hit的帖子

Culture-Invariant区分大小写的字符串比较会在不同的计算机上返回不同的结果

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

下面的测试在我的本地机器上传递,在构建机器上失败.

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

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

string.Equals("Term’s", "term’s", StringComparison.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

string.Equals 在构建服务器上返回true并在本地计算机上返回false.

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

string.Compare("Term’s", "term’s", StringComparison.Ordinal))
Run Code Online (Sandbox Code Playgroud)

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

更新:平台和字符串

字符串很重要.对于具有"异国情调"标点符号的字符串,例如右单引号右双引号,可以观察到这些结果

似乎该行为在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)); …
Run Code Online (Sandbox Code Playgroud)

.net c# cultureinfo string-comparison

13
推荐指数
1
解决办法
1055
查看次数

标签 统计

.net ×1

c# ×1

cultureinfo ×1

string-comparison ×1