stringprep — Подготовка строк для Интернета


При идентификации каких-либо сущностей (например, имен хостов) в Интернете часто приходится сравнивать такие идентификации для «равенства». Именно то, как это сравнение выполняется, может зависеть от области приложения, например, должно ли оно быть нечувствительным к регистру или нет. Может быть также необходимо ограничить возможные идентификации, чтобы разрешить только идентификации, состоящие из «печатаемых» символов.

RFC 3454 определяет процедуру «подготовки» строки Юникода в интернет- протоколах. Перед передачей строки по проводу их обрабатывают процедурой подготовки, после чего они имеют определённую нормализованную форму. RFC определяет набор таблиц, которые могут быть объединены в профили. Каждый профиль должен определить, какие таблицы он использует и какие другие необязательные части процедуры stringprep являются частью профиля. Одним из примеров профиля stringprep является nameprep, который используемый для интернационализированных доменных имен.

Модуль stringprep предоставляет только таблицы из RFC 3454. Поскольку эти таблицы будут очень большими для представления их в виде словарей или списков, модуль использует базу данных символов Юникода внутри. Сам исходный код модуля был создан с помощью утилиты mkstringprep.py.

В результате эти таблицы отображаются как функции, а не как структуры данных. В RFC существует два вида таблиц: наборы и сопоставления. Для аппарата stringprep предоставляет «характеристическую функцию», т.е. функцию, которая возвращает True, если параметр является частью аппарата. Для сопоставлений он предоставляет функцию отображения: учитывая ключ, он возвращает связанный значение. Ниже приведен список всех функций, доступных в модуле.

stringprep.in_table_a1(code)

Определить, находится ли code в tableA.1 (неназначенные кодовый точки в Юникоде 3.2).

stringprep.in_table_b1(code)

Определить, находится ли code в tableB.1 (Обычно не сопоставляется ни с чем).

stringprep.map_table_b2(code)

Возвращает отображенный значение для code в соответствии с tableB.2 (Отображение для сворачивания используемый с NFKC).

stringprep.map_table_b3(code)

Возвращает отображенный значение для code в соответствии с tableB.3 (Отображение для используемый сворачивания без нормализации).

stringprep.in_table_c11(code)

Определить, находится ли code в tableC.1.1 (символы пробела ASCII).

stringprep.in_table_c12(code)

Определить, находится ли code в tableC.1.2 (символы, не относящиеся к ASCII).

stringprep.in_table_c11_c12(code)

Определить, находится ли code в tableC.1 (пробел, объединение C.1.1 и C.1.2).

stringprep.in_table_c21(code)

Определить, находится ли code в tableC.2.1 (управляющие символы ASCII).

stringprep.in_table_c22(code)

Определить, находится ли code в tableC.2.2 (не-ASCII управляющие символы).

stringprep.in_table_c21_c22(code)

Определить, находится ли code в tableC.2 (управляющие символы, объединение C.2.1 и C.2.2).

stringprep.in_table_c3(code)

Определить, находится ли code в tableC.3 (частное использование).

stringprep.in_table_c4(code)

Определить, находится ли code в tableC.4 (Non-символ код points).

stringprep.in_table_c5(code)

Определить, находится ли code в tableC.5 (суррогат коды).

stringprep.in_table_c6(code)

Определить, находится ли code в tableC.6 (неподходящий для обычного текста).

stringprep.in_table_c7(code)

Определить, находится ли code в tableC.7 (неподходящем для канонического представления).

stringprep.in_table_c8(code)

Определить, находится ли code в tableC.8 (Изменить графические свойства или устареть).

stringprep.in_table_c9(code)

Определить, находится ли code в tableC.9 (Символы тегов).

stringprep.in_table_d1(code)

Определить, находится ли code в tableD.1 (символы с двунаправленными свойствами «R» или «AL»).

stringprep.in_table_d2(code)

Определить, находится ли code в tableD.2 (символы с двунаправленным свойством «L»).