Sayangnya, tidak mungkin bagi mesin untuk melakukan huruf besar / huruf kecil / huruf besar dengan benar. Perlu terlalu banyak informasi kontekstual untuk dipahami oleh komputer.
Itu sebabnya Stringkelas Ruby hanya mendukung huruf besar untuk karakter ASCII, karena setidaknya ada beberapa definisi yang cukup jelas.
Apa yang saya maksud dengan "informasi kontekstual"?
Misalnya, untuk imenggunakan huruf besar dengan benar, Anda perlu mengetahui bahasa mana teks tersebut berada. Bahasa Inggris, misalnya, hanya memiliki dua is: modal Itanpa titik dan kecil idengan titik. Tetapi Turki memiliki empat is: modal Itanpa titik, modal İdengan titik, kecil ıtanpa titik, kecil idengan titik. Jadi, dalam bahasa Inggris 'i'.upcase # => 'I'dan Turki 'i'.upcase # => 'İ'. Dengan kata lain: karena 'i'.upcasedapat mengembalikan dua hasil yang berbeda, tergantung pada bahasanya, jelas mustahil untuk menggunakan huruf besar dengan benar tanpa mengetahui bahasanya.
Tapi Ruby tidak tahu bahasa, hanya tahu penyandian. Oleh karena itu, mustahil untuk membuat huruf kapital dengan benar dengan fungsionalitas bawaan Ruby.
Semakin buruk: bahkan dengan mengetahui bahasa, kadang-kadang mustahil untuk melakukan huruf besar dengan benar. Misalnya, dalam bahasa Jerman, 'Maße'.upcase # => 'MASSE'( Maße adalah jamak dari pengukuran makna Maß ). Namun, (artinya massa ). Jadi apa ? Dengan kata lain: penggunaan huruf kapital yang benar membutuhkan Intelegensi Buatan yang lengkap.'Masse'.upcase # => 'MASSE''MASSE'.capitalize
Jadi, alih-alih kadang-kadang memberikan jawaban yang salah, Ruby memilih untuk kadang-kadang tidak memberikan jawaban sama sekali , itulah sebabnya karakter non-ASCII diabaikan begitu saja dalam operasi huruf kecil / huruf besar / huruf besar. (Yang tentu saja juga membacakan hasil yang salah, tetapi setidaknya mudah untuk memeriksa.)