Bug 17311 - StringComparer.InvariantCultureIgnoreCase does not provide culture-invariant string comparisons that ignore case.
Summary: StringComparer.InvariantCultureIgnoreCase does not provide culture-invariant ...
Status: NEW
Alias: None
Product: Class Libraries
Classification: Mono
Component: mscorlib (show other bugs)
Version: master
Hardware: PC Linux
: --- normal
Target Milestone: Untriaged
Assignee: Bugzilla
URL:
Depends on:
Blocks:
 
Reported: 2014-01-18 13:37 UTC by Jon Hanna
Modified: 2015-07-24 09:46 UTC (History)
2 users (show)

See Also:
Tags:
Is this bug a regression?: ---
Last known good build:


Attachments

Description Jon Hanna 2014-01-18 13:37:38 UTC
Try comparing two strings that are equal bar having different casing, under normal Unicode case-folding rules:

Console.WriteLine(StringComparer.InvariantCultureIgnoreCase.Equals("ΔΊΟΣ", "Δίος"));
Console.WriteLine(StringComparer.InvariantCultureIgnoreCase.Equals("Weißbier", "WEISSBIER"));

Expected output:

True
True

Actual output:

False
False
Comment 1 Jon Hanna 2014-01-18 13:51:05 UTC
Oh, ToUpperInvariant() seems to have bugs in its mappings, which may be related. I thought maybe ß was being upper-cased as SZ instead of SS (as per some cultures, rather than standard Unicode rules mappings), but it just gets left as ß. Similarly, ς gets upper-cased as ς, though it would be Σ in every culture in the world AFAIK, and certainly in a culturally-neutral mapping.
Comment 2 Don Cross 2015-07-24 09:46:28 UTC
This might be related to:
https://bugzilla.xamarin.com/show_bug.cgi?id=31900

Note You need to log in before you can comment on or make changes to this bug.