6.6. stringprep – подготовка интернет-строк¶stringprep – Internet String Preparation
Исходный код: Lib/stringprep.py
При идентификации различных сущностей в интернете (например, имён хостов) часто возникает необходимость сравнивать такие идентификаторы на «равенство». Конкретный способ выполнения такого сравнения может зависеть от прикладной области – например, учитывать регистр символов или нет. Кроме того, может потребоваться ограничить набор допустимых идентификаторов, разрешив только те, которые состоят из «печатных» символов.
RFC 3454 определяет процедуру «подготовки» строк Unicode в интернет-протоколах. Прежде чем передавать строки по сети, они обрабатываются этой процедурой, после чего приобретают определённую нормализованную форму. RFC определяет набор таблиц, которые можно объединять в профили. Каждый профиль должен указывать, какие таблицы он использует и какие дополнительные части процедуры stringprep в него входят. Примером профиля stringprep служит nameprep, который используется для интернационализированных доменных имён.
Модуль stringprep предоставляет только таблицы из RFC 3454. Поскольку эти
таблицы были бы слишком большими для представления в виде словарей или списков,
модуль внутренне использует базу данных символов Unicode. Исходный код самого модуля
был сгенерирован с помощью утилиты mkstringprep.py.
В результате эти таблицы представлены в виде функций, а не структур данных.
В RFC определены два типа таблиц: множества (sets) и отображения (mappings). Для множества
stringprep предоставляет «характеристическую функцию», т.е. функцию, которая
возвращает True, если параметр является элементом множества. Для отображений он предоставляет
функцию отображения: по ключу она возвращает соответствующее значение. Ниже приведён
список всех функций, доступных в модуле.
-
stringprep.in_table_a1(code)¶ Определяет, находится ли code в таблице A.1 (незакреплённые кодовые точки в Unicode 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»).