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