К сожалению, машина не может правильно использовать верхний / нижний регистр / заглавные буквы. Ему требуется слишком много контекстной информации, чтобы компьютер мог ее понять.
Вот почему String
класс Ruby поддерживает только заглавные буквы для символов ASCII, потому что там он хотя бы несколько четко определен.
Что я имею в виду под «контекстной информацией»?
Например, для i
правильного использования заглавных букв необходимо знать, на каком языке написан текст. Например, в английском языке есть только два i
s: заглавная I
без точки и маленькая i
с точкой. Но в турецком языке четыре i
s: заглавная I
без точки, заглавная İ
с точкой, маленькая ı
без точки, маленькая i
с точкой. Итак, на английском 'i'.upcase # => 'I'
и на турецком 'i'.upcase # => 'İ'
. Другими словами: поскольку в 'i'.upcase
зависимости от языка может возвращать два разных результата, очевидно, что невозможно правильно написать слово с заглавной буквы, не зная его языка.
Но Ruby не знает языка, он знает только кодировку. Поэтому невозможно правильно использовать заглавные буквы в строке с помощью встроенных функций Ruby.
Становится все хуже: даже с зная языка, иногда невозможно сделать капитализацию правильно. Например, в немецком языке 'Maße'.upcase # => 'MASSE'
( Maße - множественное число от Maß, означающего измерение ). Однако 'Masse'.upcase # => 'MASSE'
(имеется в виду масса ). Итак, что есть 'MASSE'.capitalize
? Другими словами: для правильного использования капиталовложений требуется полноценный искусственный интеллект.
Таким образом, вместо того , чтобы иногда дать неправильный ответ, Руби решает иногда не дает ответа на все , поэтому не-ASCII символы просто игнорируются в downcase / Upcase / капитализировать операции. (Что, конечно, также приводит к неверным результатам, но, по крайней мере, это легко проверить.)