2010-05-20 27 views
8

Al comparar "Île" e "Ile", C# no considera que sea el mismo.Problema al comparar el carácter francés Î

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

Para todos los demás caracteres acentuados me he encontrado que la comparación funciona bien.

¿Hay alguna otra función de comparación que deba usar?

Respuesta

6

Está especificando comparar las cadenas utilizando las reglas de comparación de la cultura invariante. Evidentemente, en la cultura invariante, las dos cadenas no se consideran iguales.

Puede comparar de una manera específica de la cultura utilizando String.Compare y proporcionando la cultura para el que se desea comparar las cuerdas:

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

Tenga en cuenta que en la cultura francés, esas cadenas son también considerado diferente. Incluí el ejemplo para mostrar, que es la cultura la que define las reglas de clasificación. Es posible que pueda encontrar una cultura que se adapte a sus necesidades o crear una personalizada con las reglas de comparación necesarias, pero que probablemente no sea la que desea.

Para obtener un buen ejemplo de normalización de la cadena para que no haya acentos, have a look at this question. Después de normalizar la cadena, podrá compararlos y considerarlos iguales. Esta sería probablemente la forma más fácil de implementar su requerimiento.

Editar

Está no sólo el carácter I que tiene este comportamiento en el InvariantCulture, esta declaración también devuelve false:

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

El marco hace lo correcto - los personajes son de hecho diferentes (tiene un significado diferente) en la mayoría de las culturas, y por lo tanto, no deberían considerarse iguales.

+0

Acabo de intentarlo, devuelve +1. – Bryan

+0

Incluso si eso funcionó, me parece extraño que el problema sea particular para ese personaje. – Bryan

+0

@Bryan: 'Î' es U + 00CE,' I' es U + 0049, son totalmente diferentes. – kennytm

Cuestiones relacionadas