2012-02-13 13 views
9

Tengo la cadena "Ärger, -Ökonom-i-Übermut-ẞ-ß" y cuando ejecuto IndexOf ("-") obtengo un resultado de 23. Si uso Replace en la misma cadena, nada es reemplazado.Extraños resultados de IndexOf en la cadena alemana

No entiendo lo que está sucediendo, ¿alguien puede por favor arrojar algo de luz sobre este tema? Application Culture se establece en croata, no es en alemán, y la versión de framework es 3.5.

Cambiar cultura a alemán (de-DE) no cambia este comportamiento extraño.

Aquí está la captura de pantalla del depurador:

enter image description here

+2

¿Es correcto que no haya "-" en el String? –

+0

Yo diría que, de alguna manera, IndexOf está tratando ẞ como un -, exactamente ese es el problema –

+2

Me parece un error. Puedo reproducir el problema con .Net 3.5, pero devuelve -1 como se esperaba con .Net 4.0. – ken2k

Respuesta

3

Dado que el Sr. Lister no desea sus votos positivos bien merecidos, pegaré su comentario aquí y acepto la respuesta.

me temo que U + 1E9E no está definido de acuerdo con .NET 3.5, porque este personaje no existía en Unicode 4.0 (o cualquier versión de Unicode 3.5 de .NET usos). Es una adición bastante nueva (versión en mayúscula de alemán ß). Entonces, la función IndexOf lo ignora. Si tiene algún control sobre el texto, puede cambiar el carácter a ß o SS, lo que sea más apropiado. Por supuesto, la mejor solución es actualizar .NET a v4.0!

1

IndexOf utiliza la cultura actual, si usted no dice lo contrario:

Este método realiza una palabra (mayúsculas y minúsculas y sensible a la cultura) buscar usando la cultura actual.

Replace utiliza una comparación ordinal:

Este método realiza un ordinal (mayúsculas y minúsculas y cultura y minúsculas) de búsqueda para encontrar oldValue.

+2

¿Hay algo que haya cambiado en este aspecto entre .NET 3.5 y .NET 4.0? Porque el código funciona como se espera en .NET 4.0. –

+0

@Darin: No estoy seguro - ese comportamiento ha sido documentado durante el tiempo que puedo recordar. Estoy haciendo algunas pruebas ahora, pero tampoco puedo replicar los resultados del OP en .NET4. – LukeH

+0

Sí, pero en .NET 3.5 se puede reproducir el comportamiento. –

Cuestiones relacionadas