Модуль utf8
utf8
– это модуль Tarantool для обработки строк в формате UTF-8. Он содержит некоторые функции, которые совместимы с функциями Lua 5.3, но возможности Tarantool намного больше. Например, поскольку Tarantool включает в себя полную копию библиотеки Международных компонентов для Юникода («International Components For Unicode»), доступны также функции сравнения, которые понимают упорядочение символов в кириллице (заглавная буква Ж = строчная буква ж) и японском языке (A в хирагане = A в катакане).
Имя | Назначение |
---|---|
casecmp and cmp |
Сравнения |
lower and upper |
Замена регистра |
isalpha, isdigit, islower and isupper |
Определение типа символа |
sub | Подстроки |
len | Длина в символах |
next | Посимвольная итерация |
-
utf8.
casecmp
(UTF8-string, utf8-string)¶ Параметры: - string (
UTF8-string
) – строка в формате UTF-8
возвращает: -1 означает «меньше», 0 означает «равно», +1 означает «больше»
тип возвращаемого значения: число
Сравнение двух строк с Таблицей сортировки символов Юникода по умолчанию (DUCET) для Алгоритма сортировки по Юникоду (Unicode Collation Algorithm). В результате „å“ меньше, чем „B“, хотя значение кодовой точки å (229) больше значения кодовой точки B (66), поскольку алгоритм основывается на значениях Таблица сортировки символов, а не на значениях кодовых точек.
Сравнение осуществляется на основании основного веса. Таким образом, не учитываются элементы, которые влияют на вторичный или последующий вес (такие как «регистр» в латинице или кириллице, или «отличия каны» в японском языке). Если спросить: «Это похоже на сортировку без учета регистра и ударения от компании Майкрософт?» - ответом будет: «Скорее да», хотя Алгоритм сортировки по Юникоду гораздо сложнее, чем это описание.
Пример:
tarantool> utf8.casecmp('é','e'),utf8.casecmp('E','e') --- - 0 - 0 ...
- string (
-
utf8.
char
(code-point[, code-point ...])¶ Параметры: - number (
code-point
) – значение кодовой точки в Юникоде, повторяется
возвращает: строка в UTF-8
тип возвращаемого значения: строка
Число кодовой точки – это значение, которое соответствует символу в Базе данных символов Юникода This is not the same as the byte values of the encoded character, because the UTF-8 encoding scheme is more complex than a simple copy of the code-point number.
Другой способ создать строку с символами Юникода – с помощью механизма экранирования символов \u{шестнадцатеричные-числа}, например, в результате и „\u{41}\u{42}“, и
utf8.char(65,66)
получим строку „AB“.Пример:
tarantool> utf8.char(229) --- - å ...
- number (
-
utf8.
cmp
(UTF8-string, utf8-string)¶ Параметры: - string (
UTF8-string
) – строка в формате UTF-8
возвращает: -1 означает «меньше», 0 означает «равно», +1 означает «больше»
тип возвращаемого значения: число
Сравнение двух строк с Таблицей сортировки символов Юникода по умолчанию (DUCET) для Алгоритма сортировки по Юникоду (Unicode Collation Algorithm). В результате „å“ меньше, чем „B“, хотя значение кодовой точки å (229) больше значения кодовой точки B (66), поскольку алгоритм основывается на значениях Таблица сортировки символов, а не на значениях кода.
Сравнение осуществляется на основании не менее трех значений веса. Таким образом, не учитываются элементы, которые влияют на вторичный или последующий вес (такие как «регистр» в латинице или кириллице, или «отличия каны» в японском языке), а верхний регистр следует за нижним.
Пример:
tarantool> utf8.cmp('é','e'),utf8.cmp('E','e') --- - 1 - 1 ...
- string (
-
utf8.
isalpha
(UTF8-character)¶ Параметры: - string-or-number (
UTF8-character
) – отдельный символ UTF8, выраженный в виде однобайтной строки или значения кодовой точки
возвращает: true (правда) или false (ложь)
тип возвращаемого значения: boolean (логический)
Возврат true (правда), если введенный символ является буквенным, в остальных случаях – false (ложь). В целом, символ считается буквенным, если он используется в рамках слова, а не как число или знак пунктуации. Такой символ необязательно должен быть буквой алфавита.
Пример:
tarantool> utf8.isalpha('Ж'),utf8.isalpha('å'),utf8.isalpha('9') --- - true - true - false ...
- string-or-number (
-
utf8.
isdigit
(UTF8-character)¶ Параметры: - string-or-number (
UTF8-character
) – отдельный символ UTF8, выраженный в виде однобайтной строки или значения кодовой точки
возвращает: true (правда) или false (ложь)
тип возвращаемого значения: boolean (логический)
Возврат true (правда), если введенный символ является цифрой, в остальных случаях – false (ложь).
Пример:
tarantool> utf8.isdigit('Ж'),utf8.isdigit('å'),utf8.isdigit('9') --- - false - false - true ...
- string-or-number (
-
utf8.
islower
(UTF8-character)¶ Параметры: - string-or-number (
UTF8-character
) – отдельный символ UTF8, выраженный в виде однобайтной строки или значения кодовой точки
возвращает: true (правда) или false (ложь)
тип возвращаемого значения: boolean (логический)
Возврат true (правда), если введенный символ относится к нижнему регистру, в остальных случаях – false (ложь).
Пример:
tarantool> utf8.islower('Ж'),utf8.islower('å'),utf8.islower('9') --- - false - true - false ...
- string-or-number (
-
utf8.
isupper
(UTF8-character)¶ Параметры: - string-or-number (
UTF8-character
) – отдельный символ UTF8, выраженный в виде однобайтной строки или значения кодовой точки
возвращает: true (правда) или false (ложь)
тип возвращаемого значения: boolean (логический)
Возврат true (правда), если введенный символ относится к верхнему регистру, в остальных случаях – false (ложь).
Пример:
tarantool> utf8.isupper('Ж'),utf8.isupper('å'),utf8.isupper('9') --- - true - false - false ...
- string-or-number (
-
utf8.
len
(UTF8-string[, start-byte[, end-byte]])¶ Параметры: - string (
UTF8-string
) – строка в формате UTF-8 - integer (
end-byte
) – позиция байта первого символа - integer – позиция байта для остановки
возвращает: количество символов в строке или же от начала до конца
тип возвращаемого значения: число
Позиции байта в начале и в конце могут быть отрицательными, что указывает на отсчет с конца строки, а не с начала.
Если строка содержит последовательность байтов, которая неприменима для UTF-8, каждый байт в неправильной последовательности будет считаться за один символ.
UTF-8 представляет собой схему кодирования изменяемого размера. Как правило, одна буква латиницы занимает один байт, буква кириллицы занимает два байта, а символ из китайского или японского языка занимает три байта, максимальный размер – четыре байта.
Пример:
tarantool> utf8.len('G'),utf8.len('ж') --- - 1 - 1 ... tarantool> string.len('G'),string.len('ж') --- - 1 - 2 ...
- string (
-
utf8.
lower
(UTF8-string)¶ Параметры: - string (
UTF8-string
) – строка в формате UTF-8
возвращает: та же строка в нижнем регистре
тип возвращаемого значения: строка
Пример:
tarantool> utf8.lower('ÅΓÞЖABCDEFG') --- - åγþжabcdefg ...
- string (
-
utf8.
next
(UTF8-string[, start-byte])¶ Параметры: - string (
UTF8-string
) – строка в формате UTF-8 - integer (
start-byte
) – позиция байта внутри строки, с которой начать выполнение, по умолчанию = 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) end 229 97 ...
- string (
-
utf8.
sub
(UTF8-string, start-character[, end-character])¶ Параметры: - string (
UTF8-string
) – строка в формате UTF-8 - number (
end-character
) – позиция первого символа - number – позиция последнего символа
возвращает: строка в формате UTF-8, «подстрока» введенного значения
тип возвращаемого значения: строка
Позиции символа в начале и в конце могут быть отрицательными, что указывает на отсчет с конца строки, а не с начала.
Значение end-character по умолчанию – длина введенной строки. Таким образом, выполнение
utf8.sub(1, 'abc')
вернет „abc“, т.е. введенную строку.Пример:
tarantool> utf8.sub('åγþжabcdefg', 5, 8) --- - abcd ...
- string (
-
utf8.
upper
(UTF8-string)¶ Параметры: - string (
UTF8-string
) – строка в формате UTF-8
возвращает: та же строка в верхнем регистре
тип возвращаемого значения: строка
Примечание
В редких случаях результат в верхнем регистре может быть длиннее введенной строки в нижнем регистре, например,
utf8.upper('ß')
вернет „SS“.Пример:
tarantool> utf8.upper('åγþжabcdefg') --- - ÅΓÞЖABCDEFG ...
- string (