Desafortunadamente, es imposible que una máquina aumente / reduzca / capitalice correctamente. Necesita demasiada información contextual para que una computadora la entienda.
Es por eso que la String
clase de Ruby solo admite mayúsculas para los caracteres ASCII, porque allí está al menos algo bien definido.
¿Qué quiero decir con "información contextual"?
Por ejemplo, para capitalizar i
correctamente, necesita saber en qué idioma está el texto. El inglés, por ejemplo, solo tiene dos i
s: capital I
sin punto y pequeño i
con punto. Pero el turco tiene cuatro i
s: capital I
sin punto, capital İ
con punto, pequeño ı
sin punto, pequeño i
con punto. Entonces, en inglés 'i'.upcase # => 'I'
y en turco 'i'.upcase # => 'İ'
. En otras palabras: dado que 'i'.upcase
puede devolver dos resultados diferentes, dependiendo del idioma, es obviamente imposible poner en mayúscula correctamente una palabra sin conocer su idioma.
Pero Ruby no conoce el idioma, solo conoce la codificación. Por lo tanto, es imposible capitalizar correctamente una cadena con la funcionalidad incorporada de Ruby.
Se pone peor: incluso con el conocimiento del idioma, a veces es imposible capitalizar correctamente. Por ejemplo, en alemán, 'Maße'.upcase # => 'MASSE'
( Maße es el plural de Maß que significa medición ). Sin embargo, 'Masse'.upcase # => 'MASSE'
(que significa masa ). Entonces que es 'MASSE'.capitalize
? En otras palabras: capitalizar correctamente requiere una Inteligencia Artificial completa.
Así, en lugar de dando a veces la respuesta equivocada, Ruby decide a veces no dan ninguna respuesta en absoluto , por lo que los caracteres no ASCII simplemente ignorados en downcase / upcase / capitalizar las operaciones. (Lo que, por supuesto, también se traduce en resultados incorrectos, pero al menos es fácil de verificar).