En C #, ¿cuál es la diferencia entre ToUpper()
y ToUpperInvariant()
?
¿Puedes dar un ejemplo donde los resultados podrían ser diferentes?
c#
internationalization
Lill Lansey
fuente
fuente
Respuestas:
ToUpper
usa la cultura actual.ToUpperInvariant
usa la cultura invariante.El ejemplo canónico es Turquía, donde la mayúscula de "i" no es "I".
Código de muestra que muestra la diferencia:
Para obtener más información sobre el turco, vea esta publicación del blog Prueba de Turquía .
No me sorprendería saber que hay varios otros problemas de capitalización en torno a los caracteres elididos, etc. Este es solo un ejemplo que conozco fuera de mi cabeza ... en parte porque me mordió hace años en Java, donde era superior -envolviendo una cadena y comparándola con "CORREO". Eso no funcionó tan bien en Turquía ...
fuente
ımage
como nombre de campoImage
y Unity 3D enviando un error interno a la consolaUnable to find key name that matches 'rıght'
en un Windows "inglés" con configuraciones regionales de Turquía para fecha y hora. Parece que a veces incluso Microsoft falla la prueba de Turquía, el idioma de una PC ni siquiera es turco, solo jajaja.La respuesta de Jon es perfecta. Solo quería agregar que
ToUpperInvariant
es lo mismo que llamarToUpper(CultureInfo.InvariantCulture)
.Eso hace que el ejemplo de Jon sea un poco más simple:
También usé New Times Roman porque es una fuente más genial.
También configuré la propiedad de
Form
's enFont
lugar de los dosLabel
controles porque laFont
propiedad se hereda.Y reduje algunas otras líneas solo porque me gusta el código compacto (ejemplo, no producción).
Realmente no tenía nada mejor que hacer en este momento.
fuente
Comience con MSDN
http://msdn.microsoft.com/en-us/library/system.string.toupperinvariant.aspx
El hecho de que una i mayúscula sea "yo" en inglés, no siempre lo hace así.
fuente
String.ToUpper
yString.ToLower
puede dar diferentes resultados dados diferentes culturas. El ejemplo más conocido es el ejemplo turco , para el cual la conversión de minúsculas latinas "i" a mayúsculas, no da como resultado una "I" latina mayúscula, sino la "I" turca.En cuanto a mí, fue confuso incluso con la imagen de arriba ( fuente ), escribí un programa (vea el código fuente a continuación) para ver la salida exacta del ejemplo turco:
Como puedes ver:
Culture.CultureInvariant
deja los caracteres turcos como estánToUpper
yToLower
son reversibles, es decir, un carácter en minúsculas después de ponerlo en mayúscula, lo lleva a la forma original, siempre y cuando para ambas operaciones se haya utilizado la misma cultura.Según MSDN , para Char.ToUpper y Char.ToLower, el turco y el azerí son las únicas culturas afectadas porque son las únicas con diferencias de carcasa de un solo carácter. Para las cuerdas, puede haber más culturas afectadas.
Código fuente de una aplicación de consola utilizada para generar la salida:
fuente
ToUpperInvariant usa las reglas de la cultura invariante
fuente
No hay diferencia en inglés. solo en la cultura turca se puede encontrar una diferencia.
fuente