Культурно-инвариантное сравнение строк с учетом регистра возвращает разные результаты на разных компьютерах
Я обнаружил, что результаты теста на моей машине и на сервере сборки отличаются. Мне удалось найти одну строку, которая отличается. Это сравнение строк. Две строки отличаются в случае первого символа.
Тест ниже проходит на моем локальном компьютере и не проходит на компьютере сборки.
[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 должен возвращать одинаковые результаты везде. Каким образом сравнение строк, зависящее от регистра, может зависеть от машины? Какие настройки я должен проверить, чтобы определить проблему?
Обновление: платформа и строкаСтрока важна. Эти результаты можно наблюдать для строк с «экзотической» пунктуацией, такой какПРАВАЯ ЕДИНАЯ ЦИТАТА или жеПРАВИЛЬНАЯ ДВОЙНАЯ ЦИТАТА
Кажется, поведение воспроизводится на компьютерах с 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.0Environment.Is64BitOperatingSystem
(сервера): TrueEnvironment.Version
(сервер) 4.0.30319.18449
Environment.OSVersion
(локальный): Microsoft Windows NT 6.1.7601 с пакетом обновления 1Environment.Is64BitOperatingSystem
(местный): правдаEnvironment.Version
(местный): 4.0.30319.18444
Это может быть известная ошибка в Windows 8, которая исправлена в Windows 8.1.