Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Модуль utf8

Общие сведения

utf8 – это модуль Tarantool для обработки строк в формате UTF-8. Он содержит некоторые функции, которые совместимы с функциями Lua 5.3, но возможности Tarantool намного больше. Например, поскольку Tarantool включает в себя полную копию библиотеки Международных компонентов для Юникода ("International Components For Unicode"), доступны также функции сравнения, которые понимают упорядочение символов в кириллице (заглавная буква Ж = строчная буква ж) и японском языке (A в хирагане = A в катакане).

Указатель

Ниже приведен перечень всех функций модуля utf8.

Имя

Назначение

utf8.casecmp() and
utf8.cmp()

Сравнение

utf8.char()

Получение строки по кодовым точкам Юникода

utf8.lower() and
utf8.upper()

Преобразование регистра

utf8.isalpha(),
utf8.isdigit(),
utf8.islower() and
utf8.isupper()

Определение типа символов

utf8.sub()

Подстроки

utf8.len()

Длина в символах

utf8.next()

Посимвольный перебор

utf8.casecmp(UTF8-string, utf8-string)

Параметры:

  • 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...

utf8.char(code-point[, code-point ...])

Параметры:

  • code-point (number) — значение кодовой точки Юникода, может повторяться

Возвращает

строку в кодировке UTF-8

Тип возвращаемого значения

строка

Число кодовой точки – это значение, которое соответствует символу в Базе данных символов Юникода. Это число не совпадает с байтовыми значениями закодированного символа, поскольку схема кодирования UTF-8 сложнее простого копирования номера кодовой точки.

Другой способ создать строку с символами Юникода – с помощью механизма экранирования символов \u{шестнадцатеричные-числа}, например, в результате и '\u{41}\u{42}', и utf8.char(65,66) получим строку 'AB'.

Пример:

tarantool> utf8.char(229)---- å...

utf8.cmp(UTF8-string, utf8-string)

Параметры:

  • 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.isalpha(UTF8-character)

Параметры:

  • UTF8-character (string или number) — одиночный символ UTF-8, заданный как однобайтовая строка или значение кодовой точки

Возвращает

true или false

Тип возвращаемого значения

логическое значение

Возврат true (правда), если введенный символ является буквенным, в остальных случаях – false (ложь). В целом, символ считается буквенным, если он используется в рамках слова, а не как число или знак пунктуации. Такой символ необязательно должен быть буквой алфавита.

Пример:

tarantool> utf8.isalpha('Ж'),utf8.isalpha('å'),utf8.isalpha('9')---- true- true- false...

utf8.isdigit(UTF8-character)

Параметры:

  • UTF8-character (string или number) — одиночный символ UTF-8, заданный как однобайтовая строка или значение кодовой точки

Возвращает

true или false

Тип возвращаемого значения

логическое значение

Возврат true (правда), если введенный символ является цифрой, в остальных случаях – false (ложь).

Пример:

tarantool> utf8.isdigit('Ж'),utf8.isdigit('å'),utf8.isdigit('9')---- false- false- true...

utf8.islower(UTF8-character)

Параметры:

  • UTF8-character (string или number) — одиночный символ UTF-8, заданный как однобайтовая строка или значение кодовой точки

Возвращает

true или false

Тип возвращаемого значения

логическое значение

Возврат true (правда), если введенный символ относится к нижнему регистру, в остальных случаях – false (ложь).

Пример:

tarantool> utf8.islower('Ж'),utf8.islower('å'),utf8.islower('9')---- false- true- false...

utf8.isupper(UTF8-character)

Параметры:

  • UTF8-character (string или number) — одиночный символ UTF-8, заданный как однобайтовая строка или значение кодовой точки

Возвращает

true или false

Тип возвращаемого значения

логическое значение

Возврат true (правда), если введенный символ относится к верхнему регистру, в остальных случаях – false (ложь).

Пример:

tarantool> utf8.isupper('Ж'),utf8.isupper('å'),utf8.isupper('9')---- true- false- false...

utf8.len(UTF8-string[, start-byte[, end-byte]])

Параметры:

  • 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.lower(UTF8-string)

Параметры:

  • UTF8-string (string) — строка в кодировке UTF-8

Возвращает

та же строка в нижнем регистре

Тип возвращаемого значения

строка

Пример:

tarantool> utf8.lower('ÅΓÞЖABCDEFG')---- åγþжabcdefg...

utf8.next(UTF8-string[, start-byte])

Параметры:

  • 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.sub(UTF8-string, start-character[, end-character])

Параметры:

  • 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.upper(UTF8-string)

Параметры:

  • UTF8-string (string) — строка в кодировке UTF-8

Возвращает

та же строка в верхнем регистре

Тип возвращаемого значения

строка

Пример:

tarantool> utf8.upper('åγþжabcdefg')---- ÅΓÞЖABCDEFG...