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 String
classe 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 i
correttamente, devi sapere in quale lingua è il testo. L'inglese, ad esempio, ha solo due i
s: maiuscolo I
senza punto e piccolo i
con un punto. Ma il turco ha quattro i
s: maiuscolo I
senza punto, maiuscolo İ
con punto, piccolo ı
senza punto, piccolo i
con punto. Quindi, in inglese 'i'.upcase # => 'I'
e in turco'i'.upcase # => 'İ'
. In altre parole: poiché 'i'.upcase
può 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.)