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 Stringclase 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 icorrectamente, necesita saber en qué idioma está el texto. El inglés, por ejemplo, solo tiene dos is: capital Isin punto y pequeño icon punto. Pero el turco tiene cuatro is: capital Isin punto, capital İcon punto, pequeño ısin punto, pequeño icon punto. Entonces, en inglés 'i'.upcase # => 'I'y en turco 'i'.upcase # => 'İ'. En otras palabras: dado que 'i'.upcasepuede 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).