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»).

Вернуться на верх