EDIT 2012-01-20: Oh Junge! Die Lösung war so viel einfacher und war fast für immer im Rahmen. Wie von knightpfhor hervorgehoben :
string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace);
Hier ist eine Funktion, mit der diakritische Zeichen von einem String entfernt werden:
static string RemoveDiacritics(string text)
{
string formD = text.Normalize(NormalizationForm.FormD);
StringBuilder sb = new StringBuilder();
foreach (char ch in formD)
{
UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(ch);
if (uc != UnicodeCategory.NonSpacingMark)
{
sb.Append(ch);
}
}
return sb.ToString().Normalize(NormalizationForm.FormC);
}
Weitere Details auf MichKaps Blog ( RIP ... ).
Das Prinzip ist, dass es 'é' in 2 aufeinanderfolgende Zeichen 'e' verwandelt, akut. Es durchläuft dann die Zeichen und überspringt die diakritischen Zeichen.
"héllo" wird zu "he <acute> llo", was wiederum zu "hallo" wird.
Debug.Assert("hello"==RemoveDiacritics("héllo"));
Hinweis: Hier ist eine kompaktere .NET4 + -freundliche Version derselben Funktion:
static string RemoveDiacritics(string text)
{
return string.Concat(
text.Normalize(NormalizationForm.FormD)
.Where(ch => CharUnicodeInfo.GetUnicodeCategory(ch)!=
UnicodeCategory.NonSpacingMark)
).Normalize(NormalizationForm.FormC);
}
string.Normalize
?Wenn Sie den String nicht konvertieren müssen und nur auf Gleichheit prüfen möchten, können Sie ihn verwenden
oder wenn Sie möchten, dass der Vergleich auch nicht zwischen Groß- und Kleinschreibung unterscheidet
quelle
Die folgende Methode
CompareIgnoreAccents(...)
arbeitet mit Ihren Beispieldaten. Hier ist der Artikel, in dem ich meine Hintergrundinformationen erhalten habe: http://www.codeproject.com/KB/cs/EncodingAccents.aspxIch denke, eine Erweiterungsmethode wäre besser:
Dann wäre die Verwendung folgende:
quelle
Ich musste etwas Ähnliches tun, aber mit einer StartsWith-Methode. Hier ist eine einfache Lösung, die von @Serge - appTranslator abgeleitet ist.
Hier ist eine Erweiterungsmethode:
Und für einen Liner Freaks;)
Akzentinkensitiv und Groß- / Kleinschreibung werden gestartet. Mit kann so aufgerufen werden
quelle
Eine einfachere Möglichkeit, Akzente zu entfernen:
quelle
Versuchen Sie diese Überladung mit der String.Compare-Methode.
String.Compare-Methode (String, String, Boolean, CultureInfo)
Es erzeugt einen int-Wert basierend auf den Vergleichsoperationen einschließlich der Kulturinfo. Das Beispiel auf der Seite vergleicht "Änderung" in en-US und en-CZ. CH in en-CZ ist ein einzelner "Buchstabe".
Beispiel aus dem Link
Für akzentuierte Sprachen müssen Sie daher die Kultur erhalten und dann die darauf basierenden Zeichenfolgen testen.
http://msdn.microsoft.com/en-us/library/hyxc48dt.aspx
quelle