Je n'ai pas utilisé cette méthode, mais Michael Kaplan décrit une méthode pour le faire dans son blog (avec une confusion titre) qui parle de décapage des signes diacritiques: le Décapage est un travail intéressant (aka
Sur le sens du sens, aka Tous
Mn caractères sont non-espacement, mais
certains sont plus non-espacement de
autres)
static string RemoveDiacritics(string text)
{
var normalizedString = text.Normalize(NormalizationForm.FormD);
var stringBuilder = new StringBuilder();
foreach (var c in normalizedString)
{
var unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c);
if (unicodeCategory != UnicodeCategory.NonSpacingMark)
{
stringBuilder.Append(c);
}
}
return stringBuilder.ToString().Normalize(NormalizationForm.FormC);
}
Notez que c'est une suite à son précédent post: le Décapage des signes diacritiques....
L'approche utilise la Chaîne.Normaliser pour diviser la chaîne d'entrée en constituant des glyphes (essentiellement la séparation de la "base", les personnages de la diacritiques), puis scanne le résultat et ne retient que les caractères de base. C'est juste un peu compliqué, mais en réalité vous êtes à la recherche à un problème compliqué.
Bien sûr, si vous êtes de te limiter à la française, vous pouvez probablement vous en sortir avec le simple tableau d'une approche axée sur la Façon de supprimer les accents et tilde en C++ std::string, comme recommandé par @David Dibben.