2010-05-20 16 views
8

Quando si confrontano "Île" e "Ile", C# non considera questi come uguali.Problema di comparazione del carattere francese Î

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

Per tutti gli altri caratteri accentati che ho incontrato il confronto funziona bene.

Esiste un'altra funzione di confronto da utilizzare?

risposta

6

Si sta specificando di confrontare le stringhe utilizzando le regole di confronto della cultura invariante. Evidentemente, nella cultura invariante, le due stringhe non sono considerate uguali.

È possibile confrontare in maniera specifica per la cultura con String.Compare e fornendo la cultura per la quale si desidera confrontare le stringhe:

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

Si prega di notare che nella cultura francese, quelle corde sono anche considerato diverso. Ho incluso l'esempio per mostrare che è la cultura che definisce le regole di ordinamento. Potresti riuscire a trovare una cultura adatta alle tue esigenze o crearne una personalizzata con le regole di confronto necessarie, ma probabilmente non è ciò che desideri.

Per un buon esempio di normalizzazione della stringa in modo che non ci siano accenti, have a look at this question. Dopo aver normalizzato la stringa, sarai in grado di confrontarli e considerarli uguali. Questo probabilmente sarebbe il modo più semplice per implementare la tua richiesta.

Modifica

E non è solo il personaggio che che ha questo comportamento nel InvariantCulture, questa affermazione ritorna anche falsa:

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

Il quadro fa la cosa giusta - quei personaggi sono in realtà diverse (ha un significato diverso) nella maggior parte delle culture e quindi non dovrebbero essere considerati uguali.

+0

Appena provato, restituisce +1. – Bryan

+0

Anche se ha funzionato, mi sembra strano che il problema sia specifico per quel personaggio. – Bryan

+0

@Bryan: 'Î' è U + 00CE,' I' è U + 0049, sono totalmente diversi. – kennytm

Problemi correlati