вівторок, 10 лютого 2009 р.

Шлях до Ruby 1.9. Крок перший: Багатомовність

Однією з важливих змін в Ruby 1.9 стала підтримка багатомовності (також відомої як m17n).
Раніше стрічки не підтримували нічого іншого крім кодування 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
=> "привіт"

Немає коментарів: