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