Модуль utf8
utf8 – это модуль Tarantool для обработки строк в формате UTF-8. Он
содержит некоторые функции, которые совместимы с функциями Lua
5.3, но возможности
Tarantool намного больше. Например, поскольку Tarantool включает в себя
полную копию библиотеки Международных компонентов для Юникода
("International Components For Unicode"), доступны также функции
сравнения, которые понимают упорядочение символов в кириллице (заглавная
буква Ж = строчная буква ж) и японском языке (A в хирагане = A в
катакане).
Ниже приведен перечень всех функций модуля utf8.
Имя | Назначение |
|---|---|
Сравнение | |
Получение строки по кодовым точкам Юникода | |
Преобразование регистра | |
utf8.isalpha(), | Определение типа символов |
Подстроки | |
Длина в символах | |
Посимвольный перебор |
Параметры:
UTF8-string(string) — строка в кодировке UTF-8
Возвращает
-1 — «меньше», 0 — «равно», +1 — «больше»
Тип возвращаемого значения
число
Сравнение двух строк с Таблицей сортировки символов Юникода по умолчанию (DUCET) для Алгоритма сортировки по Юникоду (Unicode Collation Algorithm). В результате 'å' меньше, чем 'B', хотя значение кодовой точки å (229) больше значения кодовой точки B (66), поскольку алгоритм основывается на значениях Таблица сортировки символов, а не на значениях кодовых точек.
Сравнение осуществляется на основании основного веса. Таким образом, не учитываются элементы, которые влияют на вторичный или последующий вес (такие как "регистр" в латинице или кириллице, или "отличия каны" в японском языке). Если спросить: "Это похоже на сортировку без учета регистра и ударения от компании Майкрософт?" - ответом будет: "Скорее да", хотя Алгоритм сортировки по Юникоду гораздо сложнее, чем это описание.
Пример:
tarantool> utf8.casecmp('é','e'),utf8.casecmp('E','e')---- 0- 0...
Параметры:
code-point(number) — значение кодовой точки Юникода, может повторяться
Возвращает
строку в кодировке UTF-8
Тип возвращаемого значения
строка
Число кодовой точки – это значение, которое соответствует символу в Базе данных символов Юникода. Это число не совпадает с байтовыми значениями закодированного символа, поскольку схема кодирования UTF-8 сложнее простого копирования номера кодовой точки.
Другой способ создать строку с символами Юникода – с помощью механизма
экранирования символов \u{шестнадцатеричные-числа}, например, в
результате и '\u{41}\u{42}', и utf8.char(65,66) получим строку
'AB'.
Пример:
tarantool> utf8.char(229)---- å...
Параметры:
UTF8-string(string) — строка в кодировке UTF-8
Возвращает
-1 — «меньше», 0 — «равно», +1 — «больше»
Тип возвращаемого значения
число
Сравнение двух строк с Таблицей сортировки символов Юникода по умолчанию (DUCET) для Алгоритма сортировки по Юникоду (Unicode Collation Algorithm). В результате 'å' меньше, чем 'B', хотя значение кодовой точки å (229) больше значения кодовой точки B (66), поскольку алгоритм основывается на значениях Таблица сортировки символов, а не на значениях кода.
Сравнение осуществляется на основании не менее трех значений веса. Таким образом, не учитываются элементы, которые влияют на вторичный или последующий вес (такие как "регистр" в латинице или кириллице, или "отличия каны" в японском языке), а верхний регистр следует за нижним.
Пример:
tarantool> utf8.cmp('é','e'),utf8.cmp('E','e')---- 1- 1...
Параметры:
UTF8-character(stringилиnumber) — одиночный символ UTF-8, заданный как однобайтовая строка или значение кодовой точки
Возвращает
true или false
Тип возвращаемого значения
логическое значение
Возврат true (правда), если введенный символ является буквенным, в остальных случаях – false (ложь). В целом, символ считается буквенным, если он используется в рамках слова, а не как число или знак пунктуации. Такой символ необязательно должен быть буквой алфавита.
Пример:
tarantool> utf8.isalpha('Ж'),utf8.isalpha('å'),utf8.isalpha('9')---- true- true- false...
Параметры:
UTF8-character(stringилиnumber) — одиночный символ UTF-8, заданный как однобайтовая строка или значение кодовой точки
Возвращает
true или false
Тип возвращаемого значения
логическое значение
Возврат true (правда), если введенный символ является цифрой, в остальных случаях – false (ложь).
Пример:
tarantool> utf8.isdigit('Ж'),utf8.isdigit('å'),utf8.isdigit('9')---- false- false- true...
Параметры:
UTF8-character(stringилиnumber) — одиночный символ UTF-8, заданный как однобайтовая строка или значение кодовой точки
Возвращает
true или false
Тип возвращаемого значения
логическое значение
Возврат true (правда), если введенный символ относится к нижнему регистру, в остальных случаях – false (ложь).
Пример:
tarantool> utf8.islower('Ж'),utf8.islower('å'),utf8.islower('9')---- false- true- false...
Параметры:
UTF8-character(stringилиnumber) — одиночный символ UTF-8, заданный как однобайтовая строка или значение кодовой точки
Возвращает
true или false
Тип возвращаемого значения
логическое значение
Возврат true (правда), если введенный символ относится к верхнему регистру, в остальных случаях – false (ложь).
Пример:
tarantool> utf8.isupper('Ж'),utf8.isupper('å'),utf8.isupper('9')---- true- false- false...
Параметры:
-
UTF8-string(string) — строка в кодировке UTF-8 -
start-byte(integer) — позиция байта первого символа -
end-byte(integer) — позиция байта, на которой следует остановиться
Возвращает
количество символов в строке или между начальной и конечной позициями
Тип возвращаемого значения
число
Позиции байта в начале и в конце могут быть отрицательными, что указывает на отсчет с конца строки, а не с начала.
Если строка содержит последовательность байтов, которая неприменима для UTF-8, каждый байт в неправильной последовательности будет считаться за один символ.
UTF-8 представляет собой схему кодирования изменяемого размера. Как правило, одна буква латиницы занимает один байт, буква кириллицы занимает два байта, а символ из китайского или японского языка занимает три байта, максимальный размер – четыре байта.
Пример:
tarantool> utf8.len('G'),utf8.len('ж')---- 1- 1...tarantool> string.len('G'),string.len('ж')---- 1- 2...
Параметры:
UTF8-string(string) — строка в кодировке UTF-8
Возвращает
та же строка в нижнем регистре
Тип возвращаемого значения
строка
Пример:
tarantool> utf8.lower('ÅΓÞЖABCDEFG')---- åγþжabcdefg...
Параметры:
-
UTF8-string(string) — строка в кодировке UTF-8 -
start-byte(integer) — позиция байта, с которой следует начать в строке, по умолчанию 1
Возвращает
позиция байта следующего символа и значение кодовой точки следующего символа
Тип возвращаемого значения
таблица
Функция next часто используется в цикле для получения символа за раз
из строки в формате UTF-8.
Пример:
В строке 'åa' первый символ – 'å', он начинается в позиции 1, занимает два байта, поэтому символ после него будет на позиции 3, значение кодовой точки в Юникоде (десятичное) – 229.
tarantool> -- показать позицию следующего символа + кодовую точку первого символаtarantool> utf8.next('åa', 1)---- 3- 229...tarantool> -- (цикл) показать кодовую точку каждого символаtarantool> for position,codepoint in utf8.next,'åa' do print(codepoint) end22997...
Параметры:
-
UTF8-string(string) — строка в кодировке UTF-8 -
start-character(number) — позиция первого символа -
end-character(number) — позиция последнего символа
Возвращает
строка в кодировке UTF-8, «подстрока» входного значения
Тип возвращаемого значения
строка
Позиции символа в начале и в конце могут быть отрицательными, что указывает на отсчет с конца строки, а не с начала.
Значение end-character по умолчанию – длина введенной строки. Таким
образом, выполнение utf8.sub(1, 'abc') вернет 'abc', т.е. введенную
строку.
Пример:
tarantool> utf8.sub('åγþжabcdefg', 5, 8)---- abcd...
Параметры:
UTF8-string(string) — строка в кодировке UTF-8
Возвращает
та же строка в верхнем регистре
Тип возвращаемого значения
строка
Пример:
tarantool> utf8.upper('åγþжabcdefg')---- ÅΓÞЖABCDEFG...