# `stringprep` — Internet String Preparation

Вихідний код: Lib/stringprep.py

Під час ідентифікації речей (наприклад, імен хостів) в Інтернеті часто необхідно порівнювати такі ідентифікації на «рівність». Те, як саме виконується це порівняння, може залежати від домену програми, напр. чи має він бути нечутливим до регістру чи ні. Також може знадобитися обмежити можливі ідентифікації, щоб дозволити лише ідентифікації, що складаються з «друкованих» символів.

RFC 3454 визначає процедуру «підготовки» рядків Unicode в інтернет-протоколах. Перед пропусканням струн на дріт їх обробляють процедурою підготовки, після чого вони мають певну нормовану форму. RFC визначає набір таблиць, які можна об’єднати в профілі. Кожен профіль має визначати, які таблиці він використовує, і які інші додаткові частини процедури `stringprep` є частиною профілю. Одним із прикладів профілю `stringprep` є `nameprep`, який використовується для інтернаціоналізованих доменних імен.

The module `stringprep` only exposes the tables from RFC 3454. As these tables would be very large to represent as dictionaries or lists, the module uses the Unicode character database internally. The module source code itself was generated using the `mkstringprep.py` utility.

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

stringprep.in_table_a1(code)

  Визначте, чи є код у таблиці A.1 (непризначені кодові точки в Unicode 3.2).

stringprep.in_table_b1(code)

  Визначте, чи міститься код у таблиці B.1 (зазвичай не відображається).

stringprep.map_table_b2(code)

  Повертає зіставлене значення для коду відповідно до таблиці B.2 (відповідність для згортання регістру, що використовується з NFKC).

stringprep.map_table_b3(code)

  Повертає відображене значення для коду відповідно до таблиці B.3 (відображення для згортання регістру використовується без нормалізації).

stringprep.in_table_c11(code)

  Визначте, чи міститься код у таблиці C.1.1 (символи ASCII).

stringprep.in_table_c12(code)

  Визначте, чи є код у таблиці C.1.2 (символи, що не є ASCII).

stringprep.in_table_c11_c12(code)

  Визначте, чи є код у таблиці C.1 (пробіли, об’єднання C.1.1 і C.1.2).

stringprep.in_table_c21(code)

  Визначте, чи є код у таблиці C.2.1 (контрольні символи ASCII).

stringprep.in_table_c22(code)

  Визначте, чи є код у таблиці C.2.2 (керуючі символи, що не є ASCII).

stringprep.in_table_c21_c22(code)

  Визначте, чи є код у таблиці C.2 (контрольні символи, об’єднання C.2.1 і C.2.2).

stringprep.in_table_c3(code)

  Визначте, чи є код у таблиці C.3 (приватне використання).

stringprep.in_table_c4(code)

  Визначте, чи є код у таблиці C.4 (несимвольні кодові точки).

stringprep.in_table_c5(code)

  Визначте, чи є код у таблиці C.5 (Сурогатні коди).

stringprep.in_table_c6(code)

  Визначте, чи міститься код у таблиці C.6 (неприйнятний для звичайного тексту).

stringprep.in_table_c7(code)

  Визначте, чи є код у таблиці C.7 (невідповідний для канонічного представлення).

stringprep.in_table_c8(code)

  Визначте, чи є код у таблиці C.8 (змінити властивості відображення або застаріли).

stringprep.in_table_c9(code)

  Визначте, чи є код у таблиці C.9 (символи тегів).

stringprep.in_table_d1(code)

  Визначте, чи є код у таблиці D.1 (символи з двонаправленою властивістю «R» або «AL»).

stringprep.in_table_d2(code)

  Визначте, чи є код у таблиці D.2 (Символи з двонаправленою властивістю «L»).