Ignorant les lettres accentuées en comparaison de chaînes de caractères
J'ai besoin de comparer 2 chaînes de caractères en C# et traiter les lettres accentuées comme des lettres accentuées. Par exemple:
string s1 = "hello";
string s2 = "héllo";
s1.Equals(s2, StringComparison.InvariantCultureIgnoreCase);
s1.Equals(s2, StringComparison.OrdinalIgnoreCase);
Ces 2 cordes doivent être la même (autant que ma demande est en cause), mais ces deux états à false. Est-il possible en C# pour ce faire?
Vous devez vous connecter pour publier un commentaire.
MODIFIER 2012-01-20: Oh boy! La solution était tellement plus simple et a été dans le cadre presque jamais. Comme l'a souligné knightpfhor :
Voici une fonction qui supprime les signes diacritiques à partir d'une chaîne:
Plus de détails sur MichKap blog (RIP...).
Le principe est qu'il tourne 'é' en 2 successives de caractères "e", aiguë.
Ensuite, il parcourt les caractères et ignore les signes diacritiques.
"héllo" devient "il<aigu>llo", qui devient à son tour "bonjour".
Remarque: en Voici un de plus compact .NET4+ version imprimable de la même fonction:
string.Normalize
?Si vous n'avez pas besoin de convertir la chaîne et vous voulez juste pour vérifier l'égalité, vous pouvez utiliser
ou si vous voulez que la comparaison insensible à la casse ainsi
La méthode suivante
CompareIgnoreAccents(...)
fonctionne sur vos données d'exemple. Voici l'article où j'ai obtenu mon arrière-plan de l'information: http://www.codeproject.com/KB/cs/EncodingAccents.aspxJe pense que d'une extension de la méthode qui convient le mieux:
Puis l'utilisation serait la suivante:
Je devais faire quelque chose de similaire, mais avec un StartsWith méthode. Voici une solution simple dérivé de @Serge - appTranslator.
Ici est une extension de la méthode:
Et pour l'un des paquebots de freaks 😉
Accent incensitive et cas incensitive startsWith peut être appelée comme cela
Un moyen plus simple de supprimer les accents:
essayer cette surcharge sur la Chaîne.La Méthode De Comparaison.
Chaîne.Méthode Compare (String, String, Boolean, CultureInfo)
Il produit un int valeur basée sur les opérations de comparaison, y compris cultureinfo. l'exemple de la page compare "Changement" dans fr-fr et fr-CZ. CH de fr-CZ est une seule "lettre".
exemple à partir du lien
à cet effet pour les accents des langues que vous aurez besoin d'obtenir de la culture puis de tester les chaînes en fonction de cela.
http://msdn.microsoft.com/en-us/library/hyxc48dt.aspx