Sfortunatamente, è impossibile per una macchina eseguire l'upcase / downcase / capitalizzazione corretta. Ha bisogno di troppe informazioni contestuali per un computer per capire.
Ecco perché la Stringclasse di Ruby supporta solo le maiuscole per i caratteri ASCII, perché è almeno un po ' ben definita.
Cosa intendo per "informazioni contestuali"?
Ad esempio, per capitalizzare icorrettamente, devi sapere in quale lingua è il testo. L'inglese, ad esempio, ha solo due is: maiuscolo Isenza punto e piccolo icon un punto. Ma il turco ha quattro is: maiuscolo Isenza punto, maiuscolo İcon punto, piccolo ısenza punto, piccolo icon punto. Quindi, in inglese 'i'.upcase # => 'I'e in turco'i'.upcase # => 'İ' . In altre parole: poiché 'i'.upcasepuò restituire due risultati diversi, a seconda della lingua, è ovviamente impossibile capitalizzare correttamente una parola senza conoscerne la lingua.
Ma Ruby non conosce la lingua, conosce solo la codifica. Pertanto è impossibile capitalizzare correttamente una stringa con la funzionalità integrata di Ruby.
Peggio ancora: anche con la conoscenza della lingua, a volte è impossibile fare correttamente le maiuscole. Ad esempio, in tedesco 'Maße'.upcase # => 'MASSE'( Maße è il plurale di Maß che significa misurazione ). Tuttavia, 'Masse'.upcase # => 'MASSE'(che significa massa ). Allora, cos'è 'MASSE'.capitalize? In altre parole: la corretta capitalizzazione richiede un'intelligenza artificiale completa.
Così, invece di dare a volte la risposta sbagliata, Rubino sceglie di volte danno nessuna risposta a tutti , motivo per cui i caratteri non ASCII ottenere semplicemente ignorate in downcase / upcase / capitalizzare le operazioni. (Che ovviamente legge anche risultati errati, ma almeno è facile da controllare.)