Skip to content

Instantly share code, notes, and snippets.

@lydonchandra
Created October 17, 2022 04:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lydonchandra/81fd49c000d93ddf731de9a4b2faddbb to your computer and use it in GitHub Desktop.
Save lydonchandra/81fd49c000d93ddf731de9a4b2faddbb to your computer and use it in GitHub Desktop.
string-comparison edge case culture.cs
// https://www.meziantou.net/string-comparisons-are-harder-than-it-seems.htm
Console.WriteLine("The current culture is {0}",
Thread.CurrentThread.CurrentCulture.Name);
//Thread.CurrentThread.CurrentCulture = new CultureInfo("tr-TR");
//// Change the current culture to Portuguese (Brazil).
//Console.WriteLine("Current culture changed to {0}",
// Thread.CurrentThread.CurrentCulture.Name);
CultureInfo.CurrentCulture = new CultureInfo("tr-TR"); // Turkish
string.Equals("i", "I", StringComparison.CurrentCultureIgnoreCase).Dump(); // false
string.Equals("i", "İ", StringComparison.CurrentCultureIgnoreCase).Dump(); // true
string.Equals("i", "İ", StringComparison.OrdinalIgnoreCase).Dump(); // false
string.Equals("i", "İ", StringComparison.CurrentCulture).Dump(); // false
string.Equals("i", "I", StringComparison.OrdinalIgnoreCase).Dump(); // true
CultureInfo.CurrentCulture = new CultureInfo("de-DE"); // german
string.Equals("ss", "ß", StringComparison.OrdinalIgnoreCase).Dump(); // false
string.Equals("ss", "ß", StringComparison.InvariantCulture).Dump(); // true on Windows / false on Linux (WSL)
string.Equals("ss", "ß", StringComparison.InvariantCultureIgnoreCase).Dump();
string.Equals("æ", "ae", StringComparison.Ordinal).Dump(); // false
string.Equals("æ", "ae", StringComparison.InvariantCulture).Dump(); // true
CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("hu-HU");
"endz".Contains("z", StringComparison.CurrentCulture).Dump(); // False
"endz".Contains("d", StringComparison.CurrentCulture).Dump(); // False
"endz".Contains("dz", StringComparison.CurrentCulture).Dump(); // True
"d".Contains("d", StringComparison.CurrentCulture).Dump(); // True
"z".Contains("z", StringComparison.CurrentCulture).Dump(); // True
CultureInfo.CurrentCulture = new CultureInfo("th_TH.UTF8");
string.Equals("1", "๑", StringComparison.CurrentCulture); // true
string.Equals("1", "๑", StringComparison.InvariantCultureIgnoreCase); // false
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment