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