4.2.1. Библиотека jcode и переменная $KCODE

4.2.1. Библиотека jcode и переменная $KCODE

Чтобы использовать в Ruby разные наборы символов, вы должны знать о глобальной переменной $KCODE, от значения которой зависит поведение многих системных методов, манипулирующих строками. (Кстати говоря, буква K — напоминание о кандзи, одной из иероглифических азбук в японском языке.) Эта переменная принимает одно из пяти стандартных значений, каждое из которых представлено одной буквой, неважно — строчной или прописной (ASCII и NONE — одно и то же).

a ASCII

n NONE (ASCII)

е EUC

s SJIS

u UTF-8

Для ясности можно пользоваться и полными названиями (например, $KCODE="UTF-8"). Важен только первый символ.

О кодировке ASCII мы уже знаем. EUC и Shift-JIS (SJIS) нам малоинтересны. Мы сосредоточимся на значении UTF-8.

Установив значение $KCODE, вы задаром получаете весьма богатую функциональность. Например, метод inspect (он автоматически вызывается при обращении к методу p для печати объекта в читаемом виде) обычно учитывает текущее значение $KCODE.

$KCODE = "n"

# Для справки: французское слово "?p?e"

# обозначает разновидность меча (sword).

eacute = ""

eacute << 0303 << 0251 # U+00E9

sword = eacute + "p" + eacute + "e"

p eacute # "303251"

p sword # "303251p303251e"

$KCODE = "u"

p eacute # "?"

p sword  # "?p?e"

Регулярные выражения в режиме UTF-8 тоже становятся несколько «умнее».

$KCODE = "n"

letters = sword.scan(/(.)/)

# [["303"], ["251"], ["p"], ["303"], ["251"], ["e"]]

puts letters.size # 6

$KCODE = "u"

letters = sword.scan(/(.)/)

# [["?"], ["p"], ["?"], ["e"]]

puts letters.size # 4

Библиотека jcode предоставляет также несколько полезных методов, например jlength и each_char. Рекомендую включать эту библиотеку с помощью директивы require всякий раз, как вы работаете с кодировкой UTF-8.

В следующем разделе мы снова рассмотрим некоторые типичные операции со строками и регулярными выражениями. Заодно поближе познакомимся с jcode.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

5.6.3 Переменная PATH

Из книги Linux для пользователя автора Костромин Виктор Алексеевич

5.6.3 Переменная PATH Еще одна очень важная переменная имеет имя PATH. Она задает перечень путей к каталогам, в которых bash осуществляет поиск файлов (в частности, файлов с командами) в тех случаях, когда полный путь к файлу не задан в командной строке. Отдельные каталоги в этом


5.6.4 Переменная IFS

Из книги 300 лучших программ на все случаи жизни автора Леонтьев Виталий Петрович

5.6.4 Переменная IFS Эта переменная задает разделители полей (Internal Field Separator), которые используются при операции разделения слов при преобразованиях командной строки, выполняемых оболочкой перед тем, как запустить командную строку на исполнение. Значение этой переменной по


Библиотека

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

Библиотека CoolReaderСайт: http://www.coolreader.orgРазмер: 1,6 МбСтатус: Freeware CoolReader – «читалка» почти идеальная, во всяком случае, для настольного компьютера. Варианта программы для PocketPC, увы, не предусмотрено – в этом случае вас выручит привычный HaaliReader. Кроме того, несколько огорчает


5.12. Библиотека mathn

Из книги VBA для чайников автора Каммингс Стив

5.12. Библиотека mathn В программах, выполняющих большой объем математических вычислений, очень пригодится замечательная библиотека mathn, которую написал Кейдзу Исидзука (Keiju Ishitsuka). В ней есть целый ряд удобных методов и классов; кроме того, она унифицирует все классы Ruby для


10.2.8. Библиотека DBM

Из книги PGP: Кодирование и шифрование информации с открытым ключом. автора Левин Максим


14.3. Библиотека Shell

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

14.3. Библиотека Shell Не всегда Ruby удобен в качестве языка сценариев. Например, в языке bash для запуска внешней программы достаточно просто указать ее имя безо всякого дополнительного синтаксиса.Оборотной стороной мощи и гибкости Ruby является более сложный синтаксис. Кроме


Что содержит переменная перед тем, как ей присваивается значение?

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель

Что содержит переменная перед тем, как ей присваивается значение? Во время выполнения процедуры VBA выделяет для каждой переменной из этой процедуры пространство в памяти и приписывает переменной начальное значение; означающее, что в переменной ничего не хранится. Чаще


Системная переменная для задания имени пути.

Из книги C++ для начинающих автора Липпман Стенли

Системная переменная для задания имени пути. PGP использует несколько специальных файлов для своих целей, таких, как ваши стандартные каталоги ключей "pubring.pgp" и "secring.pgp", файл начального числа для генерации случайных чисел "randseed.bin", файл конфигурации PGP "config.txt" и файл перевода


Условная переменная

Из книги Разработка ядра Linux автора Лав Роберт

Условная переменная Одним из важнейших принципов использования мьютексов является максимальное сокращение размеров критической секции, то есть участка, который потоки должны проходить последовательно. Однако зачастую возникает необходимость ожидания выполнения


Переменная FIREBIRD (или INTERBASE)

Из книги Описание языка PascalABC.NET автора Коллектив РуБоард

Переменная FIREBIRD (или INTERBASE) Если установлена переменная окружения FIREBIRD (INTERBASE для версии 1.0.x), то она используется и при инсталляции, и в процессе работы на всех платформах для указания корневого каталога сервера Firebird. Если она присутствует, то перекрываются все другие


Пример 9-8. Содержимое $* и $@, когда переменная $IFS -- пуста

Из книги автора

Пример 9-8. Содержимое $* и $@, когда переменная $IFS -- пуста #!/bin/bash# Если переменная $IFS инициализирована "пустым" значением,# то "$*" и "$@" содержат аргументы не в том виде, в каком ожидается.mecho () # Вывод аргументов.{echo "$1,$2,$3";}IFS="" # Инициализация "пустым" значением.set a b c #


Пример 9-9. Переменная "подчеркивание"

Из книги автора

Пример 9-9. Переменная "подчеркивание" #!/bin/bashecho $_ # /bin/bash # Для запуска сценария был вызван /bin/bash.du >/dev/null # Подавление вывода.echo $_ # duls -al >/dev/null # Подавление вывода.echo $_ # -al (последний аргумент):echo $_ # :$?Код возврата команды, функции


Переменная jiffies

Из книги автора

Переменная jiffies Глобальная переменная jiffies содержит количество импульсов системного таймера, которые были получены со времени загрузки системы. При загрузке ядро устанавливает значение этого параметра в нуль и он увеличивается на единицу при каждом прерывании


Переменная Self

Из книги автора

Переменная Self Внутри каждого нестатического метода неявно определяется переменная Self, ссылающаяся на объект, вызвавший этот метод.Например: type A = class i: integer; constructor Create(i: integer); begin Self.i := i; end; end; В момент вызова конструктора Create объект будет уже создан.