stringprep
— Подготовка строки согласно RFC 3453
При идентификации объектов (например, имён хостов) в Интернете часто необходимо сравнивать идентификации на предмет «равенства». Как именно выполняется сравнение, может зависеть от домена приложения, например, должен ли он быть нечувствительным к регистру или нет. Также может быть необходимо ограничить возможные идентификации, чтобы разрешить только идентификации, состоящие из «печатных» символов.
RFC 3454 определяет процедуру «подготовки» Юникод строк в интернет-протоколах.
Перед передачей строк на обработку, они обрабатываются
процедурой подготовки, после чего приобретают нормализованную форму.
RFC определяет множество таблиц, которые можно объединять в профили.
Каждый профиль должен
определять, какие таблицы он использует и какие другие необязательные части
процедуры stringprep
являются частью профиля. Одним из примеров профиля
stringprep
является nameprep
, используемый для
интернационализированных доменных имён.
Модуль stringprep
предоставляет только таблицы из RFC 3454. Поскольку
данные таблицы были бы очень большими, чтобы представлять их в виде словарей
или списков, модуль использует внутреннюю базу данных символов Юникод. Сам
исходный код модуля был сгенерирован с помощью утилиты mkstringprep.py
.
В результате данные таблицы отображаются как функции, а не как структуры
данных. В RFC есть два вида таблиц: множества и сопоставления. Для множеств
stringprep
предоставляет «характеристическую функцию», т. е. функцию,
которая возвращает True
, если параметр является частью множества. Для
сопоставлений он предоставляет функцию сопоставления: по ключу он возвращает
связанное значение. Ниже приведен список всех доступных в модуле функций.
-
stringprep.
in_table_a1
(code) Определяет, находится ли code в таблице A.1 (неназначенные кодовые точки в Юникод 3.2).
-
stringprep.
in_table_b1
(code) Определяет, находится ли code в таблице B.1 (обычно ничего не отображается).
-
stringprep.
map_table_b2
(code) Возвращает сопоставленное значение для code в соответствии с таблицей B.2 (сопоставление для складывания регистра, используемое с NFKC).
-
stringprep.
map_table_b3
(code) Возвращает сопоставленное значение для code в соответствии с таблицей B.3 (сопоставление для свертывания регистра используется без нормализации).
-
stringprep.
in_table_c11
(code) Определяет, находится ли code в таблице C.1.1 (символы пробела ASCII).
-
stringprep.
in_table_c12
(code) Определяет, находится ли code в таблице C.1.2 (пробелы, отличные от ASCII).
-
stringprep.
in_table_c11_c12
(code) Определяет, находится ли code в таблице C.1 (пробелы, объединение C.1.1 и C.1.2).
-
stringprep.
in_table_c21
(code) Определяет, находится ли code в таблице C.2.1 (управляющие символы ASCII).
-
stringprep.
in_table_c22
(code) Определяет, находится ли code в таблице C.2.2 (управляющие символы, отличные от ASCII).
-
stringprep.
in_table_c21_c22
(code) Определяет, находится ли code в таблице C.2 (управляющие символы, объединение C.2.1 и C.2.2).
-
stringprep.
in_table_c3
(code) Определяет, находится ли code в таблице C.3 (частное использование).
-
stringprep.
in_table_c4
(code) Определяет, находится ли code в таблице C.4 (несимвольные кодовые точки).
-
stringprep.
in_table_c5
(code) Определяет, присутствует ли code в таблице C.5 (суррогатные коды).
-
stringprep.
in_table_c6
(code) Определяет, находится ли code в таблице C.6 (не подходит для обычного текста).
-
stringprep.
in_table_c7
(code) Определяет, находится ли code в таблице C.7 (не подходит для канонического представления).
-
stringprep.
in_table_c8
(code) Определяет, находится ли code в таблице C.8 (изменить свойства отображения или устарели).
-
stringprep.
in_table_c9
(code) Определяет, находится ли code в таблице C.9 (маркировка символов).
-
stringprep.
in_table_d1
(code) Определяет, находится ли code в таблице D.1 (символы с двунаправленным свойством «R» или «AL»).
-
stringprep.
in_table_d2
(code) Определяет, находится ли code в таблице D.2 (символы с двунаправленным свойством «L»).