Ein Unterschied zwischen Form C und Form D besteht darin, wie Buchstaben mit Akzenten dargestellt werden: Form C verwendet einen einzelnen Codepunkt mit Buchstaben und Akzenten, während Form D diesen in einen Buchstaben und einen Akzent unterteilt.
Beispielsweise kann ein "à" der Codepunkt 224 ("lateinischer Kleinbuchstabe A mit Grab") oder der Codepunkt 97 ("lateinischer Kleinbuchstabe A") sein, gefolgt vom Codepunkt 786 ("Kombinieren des Grabakzents"). Ein char-by-char-Vergleich würde diese als unterschiedlich ansehen. Durch die Normalisierung ist der Vergleich erfolgreich.
Ein Nebeneffekt ist, dass dies das einfache Erstellen einer Methode zum Entfernen von Akzenten ermöglicht.
public static string RemoveAccents(string input)
{
return new string(input
.Normalize(System.Text.NormalizationForm.FormD)
.ToCharArray()
.Where(c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
.ToArray());
}