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.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Переменная jiffies
Переменная jiffies Глобальная переменная jiffies содержит количество импульсов системного таймера, которые были получены со времени загрузки системы. При загрузке ядро устанавливает значение этого параметра в нуль и он увеличивается на единицу при каждом прерывании
Условная переменная
Условная переменная Одним из важнейших принципов использования мьютексов является максимальное сокращение размеров критической секции, то есть участка, который потоки должны проходить последовательно. Однако зачастую возникает необходимость ожидания выполнения
5.6.3 Переменная PATH
5.6.3 Переменная PATH Еще одна очень важная переменная имеет имя PATH. Она задает перечень путей к каталогам, в которых bash осуществляет поиск файлов (в частности, файлов с командами) в тех случаях, когда полный путь к файлу не задан в командной строке. Отдельные каталоги в этом
5.6.4 Переменная IFS
5.6.4 Переменная IFS Эта переменная задает разделители полей (Internal Field Separator), которые используются при операции разделения слов при преобразованиях командной строки, выполняемых оболочкой перед тем, как запустить командную строку на исполнение. Значение этой переменной по
Что содержит переменная перед тем, как ей присваивается значение?
Что содержит переменная перед тем, как ей присваивается значение? Во время выполнения процедуры VBA выделяет для каждой переменной из этой процедуры пространство в памяти и приписывает переменной начальное значение; означающее, что в переменной ничего не хранится. Чаще
5.12. Библиотека mathn
5.12. Библиотека mathn В программах, выполняющих большой объем математических вычислений, очень пригодится замечательная библиотека mathn, которую написал Кейдзу Исидзука (Keiju Ishitsuka). В ней есть целый ряд удобных методов и классов; кроме того, она унифицирует все классы Ruby для
14.3. Библиотека Shell
14.3. Библиотека Shell Не всегда Ruby удобен в качестве языка сценариев. Например, в языке bash для запуска внешней программы достаточно просто указать ее имя безо всякого дополнительного синтаксиса.Оборотной стороной мощи и гибкости Ruby является более сложный синтаксис. Кроме
Переменная FIREBIRD (или INTERBASE)
Переменная FIREBIRD (или INTERBASE) Если установлена переменная окружения FIREBIRD (INTERBASE для версии 1.0.x), то она используется и при инсталляции, и в процессе работы на всех платформах для указания корневого каталога сервера Firebird. Если она присутствует, то перекрываются все другие
Библиотека
Библиотека CoolReaderСайт: http://www.coolreader.orgРазмер: 1,6 МбСтатус: Freeware CoolReader – «читалка» почти идеальная, во всяком случае, для настольного компьютера. Варианта программы для PocketPC, увы, не предусмотрено – в этом случае вас выручит привычный HaaliReader. Кроме того, несколько огорчает
Пример 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 $_ # :$?Код возврата команды, функции
Системная переменная для задания имени пути.
Системная переменная для задания имени пути. PGP использует несколько специальных файлов для своих целей, таких, как ваши стандартные каталоги ключей "pubring.pgp" и "secring.pgp", файл начального числа для генерации случайных чисел "randseed.bin", файл конфигурации PGP "config.txt" и файл перевода
Переменная Self
Переменная Self Внутри каждого нестатического метода неявно определяется переменная Self, ссылающаяся на объект, вызвавший этот метод.Например: type A = class i: integer; constructor Create(i: integer); begin Self.i := i; end; end; В момент вызова конструктора Create объект будет уже создан.
Фултон Хэл
Просмотр ограничен
Смотрите доступные для ознакомления главы 👉