Раніше стрічки не підтримували нічого іншого крім кодування ASCII. Ruby 1.8 завжди припускає, що символ має рівно один байт, що незмінно призводить до проблем при роботі з мультибайтним кодуванням. Встановивши змінну $KCODE можна додати підтримку для різних кодувань (наприклад японського або UTF-8), але навіть у цьому випадку існує ряд проблем, що робить роботу з такими стрічками незручною.
Інші мови програмування вирішують цю проблему, використовуючи одне внутрішнє кодування для всіх своїх стрічок. Python, наприклад, використовує Unicode. Це означає, що він повинен перекодувати стрічки в інше кодування, після чого може працювати з ними. Однак Ruby 1.9 підтримує по-стрічкове кодування символів, а також конвертування між кодуваннями. Практично, це означає, що ви можете призначити для кожної стрічки її власне кодування, і Ruby автоматично зробить всі необхідні речі (наприклад такі як обчислення довжини стрічки). Кодування представляються класом Encoding. Кожен екземпляр являє собою конкретне кодування, наприклад, UTF-8. Ви можете отримати список всіх вбудованих кодувань викликавши Encoding.list.
$ ruby1.9 --version
ruby 1.9.0 (2008-06-20 revision 17482) [i486-linux]
$ irb1.9
irb(main):001:0> Encoding.list.size
=> 81
Імена кодувань вбудованих в Ruby 1.9
Недоліки:
Наприклад метод str.upcase повертає копію рядка з усіма буквами нижнього регістру, заміненими їхніми аналогами у верхньому регістрі. Ця операція діє тільки в ASCII регіоні (на символи 'a' - 'z'). Аналогічно і для методів: capitalize, downcase, swapcase, upcase.
$ irb1.9
irb(main):001:0> "hello".upcase
=> "HELLO"
irb(main):002:0> "привіт".upcase
=> "привіт"
Немає коментарів:
Дописати коментар