> **Источник:** https://python-all.ru/3.0/library/stringprep.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# `stringprep` – подготовка интернет-строк

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

[**RFC 3454**](https://python-all.ru/3.0/library/stringprep.html) определяет процедуру «подготовки» строк Unicode в интернет-протоколах. Перед отправкой строки по сети они обрабатываются процедурой подготовки, после чего они приобретают определенную нормализованную форму. RFC определяет набор таблиц, которые можно комбинировать в профили. Каждый профиль должен указывать, какие таблицы он использует и какие другие необязательные части процедуры `stringprep` входят в профиль. Один из примеров профиля `stringprep` – `nameprep`, который используется для интернационализированных доменных имён.

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

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

#### `[stringprep.in_table_a1]stringprep.in_table_a1(code)`

Определяет, находится ли

*code*

в таблице A.1 (незакреплённые кодовые точки в Unicode 3.2).

#### `[stringprep.in_table_b1]stringprep.in_table_b1(code)`

Определяет, находится ли

*code*

в таблице B.1 (обычно отображается в пустую строку).

#### `[stringprep.map_table_b2]stringprep.map_table_b2(code)`

Возвращает отображённое значение для

*code*

в соответствии с таблицей B.2 (отображение для приведения к нижнему регистру, используемое с NFKC).

#### `[stringprep.map_table_b3]stringprep.map_table_b3(code)`

Возвращает отображённое значение для

*code*

в соответствии с таблицей B.3 (отображение для приведения к нижнему регистру без нормализации).

#### `[stringprep.in_table_c11]stringprep.in_table_c11(code)`

Определяет, находится ли

*code*

в таблице C.1.1 (пробельные символы ASCII).

#### `[stringprep.in_table_c12]stringprep.in_table_c12(code)`

Определяет, находится ли

*code*

в таблице C.1.2 (не-ASCII пробельные символы).

#### `[stringprep.in_table_c11_c12]stringprep.in_table_c11_c12(code)`

Определяет, находится ли

*code*

в таблице C.1 (пробельные символы, объединение C.1.1 и C.1.2).

#### `[stringprep.in_table_c21]stringprep.in_table_c21(code)`

Определяет, находится ли

*code*

в таблице C.2.1 (управляющие символы ASCII).

#### `[stringprep.in_table_c22]stringprep.in_table_c22(code)`

Определяет, находится ли

*code*

в таблице C.2.2 (не-ASCII управляющие символы).

#### `[stringprep.in_table_c21_c22]stringprep.in_table_c21_c22(code)`

Определяет, находится ли

*code*

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

#### `[stringprep.in_table_c3]stringprep.in_table_c3(code)`

Определяет, находится ли

*code*

в таблице C.3 (частное использование).

#### `[stringprep.in_table_c4]stringprep.in_table_c4(code)`

Определяет, находится ли

*code*

в таблице C.4 (кодовые точки, не являющиеся символами).

#### `[stringprep.in_table_c5]stringprep.in_table_c5(code)`

Определяет, находится ли

*code*

в таблице C.5 (суррогатные коды).

#### `[stringprep.in_table_c6]stringprep.in_table_c6(code)`

Определяет, находится ли

*code*

в таблице C.6 (непригодные для обычного текста).

#### `[stringprep.in_table_c7]stringprep.in_table_c7(code)`

Определяет, находится ли

*code*

в таблице C.7 (непригодные для канонического представления).

#### `[stringprep.in_table_c8]stringprep.in_table_c8(code)`

Определяет, находится ли

*code*

в таблице C.8 (изменяют свойства отображения или устарели).

#### `[stringprep.in_table_c9]stringprep.in_table_c9(code)`

Определяет, находится ли

*code*

в таблице C.9 (тегирующие символы).

#### `[stringprep.in_table_d1]stringprep.in_table_d1(code)`

Определяет, находится ли

*code*

в таблице D.1 (символы с двунаправленным свойством «R» или «AL»).

#### `[stringprep.in_table_d2]stringprep.in_table_d2(code)`

Определяет, находится ли

*code*

в таблице D.2 (символы с двунаправленным свойством «L»).
