2010-05-20 12 views
8

Lorsque l'on compare «Île» et «Ile», C# ne considère pas que ces éléments soient identiques.Problème comparant le caractère français Î

string.Equals("Île", "Ile", StringComparison.InvariantCultureIgnoreCase) 

Pour tous les autres caractères accentués, j'ai trouvé que la comparaison fonctionne correctement.

Y a-t-il une autre fonction de comparaison que je devrais utiliser?

Répondre

6

Vous spécifiez de comparer les chaînes en utilisant les règles de comparaison de la culture Invariant. Évidemment, dans la culture invariante, les deux chaînes ne sont pas considérées égales.

Vous pouvez les comparer d'une manière spécifique à la culture en utilisant String.Compare et fournissant la culture pour laquelle vous voulez comparer les chaînes:

if(String.Compare("Île", "Ile", new CultureInfo("fr-FR"), CompareOptions.None)==0) 

S'il vous plaît noter que dans la culture française, ces chaînes sont également considéré comme différent. J'ai inclus l'exemple pour montrer que c'est la culture qui définit les règles de tri. Vous pourriez être en mesure de trouver une culture qui correspond à vos besoins, ou en construire une personnalisée avec les règles de comparaison nécessaires, mais que ce n'est probablement pas ce que vous voulez.

Pour un bon exemple de normalisation de la chaîne de sorte qu'il n'y a pas d'accents, have a look at this question. Après avoir normalisé la chaîne, vous seriez en mesure de les comparer et de les considérer comme égaux. Ce serait probablement le moyen le plus simple de mettre en œuvre votre exigence.

Modifier

Il est non seulement le caractère I qui a ce comportement dans le InvariantCulture, cette déclaration renvoie également faux:

String.Equals("Ilê", "Ile", StringComparison.InvariantCultureIgnoreCase) 

Le cadre fait la bonne chose - ces personnages sont en fait différents (a un sens différent) dans la plupart des cultures, et par conséquent, ils ne devraient pas être considérés comme identiques.

+0

Juste essayé, renvoie +1. – Bryan

+0

Même si cela a fonctionné, il me semble étrange que le problème soit particulier à ce personnage. – Bryan

+0

@Brian: 'Î' est U + 00CE,' I' est U + 0049, ils sont totalement différents. – kennytm