# `stringprep` — Preparação de string para internet

Código-fonte: Lib/stringprep.py

Ao identificar coisas (como nomes de host) na internet, muitas vezes é necessário comparar tais identificações para “igualdade”. Exatamente como essa comparação é executada pode depender do domínio da aplicação, por exemplo, se deve ser insensível a maiúsculas e minúsculas ou não. Também pode ser necessário restringir as possíveis identificações, para permitir apenas identificações consistindo de caracteres “imprimíveis”.

RFC 3454 define um procedimento para “preparar” strings Unicode em protocolos de internet. Antes de passar strings para o fio, elas são processadas com o procedimento de preparação, após o qual elas têm uma certa forma normalizada. O RFC define um conjunto de tabelas, que podem ser combinadas em perfis. Cada perfil deve definir quais tabelas ele usa, e quais outras partes opcionais do procedimento `stringprep` são parte do perfil. Um exemplo de um perfil `stringprep` é `nameprep`, que é usado para nomes de domínio internacionalizados.

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.

As a result, these tables are exposed as functions, not as data structures. There are two kinds of tables in the RFC: sets and mappings. For a set, `stringprep` provides the “characteristic function”, i.e. a function that returns `True` if the parameter is part of the set. For mappings, it provides the mapping function: given the key, it returns the associated value. Below is a list of all functions available in the module.

stringprep.in_table_a1(code)

  Determina se code está na tabela A.1 (pontos de código não atribuídos no Unicode 3.2).

stringprep.in_table_b1(code)

  Determina se code está na tabela B.1 (comumente mapeado para nada).

stringprep.map_table_b2(code)

  Retorna o valor mapeado para code de acordo com a tabela B.2 (mapeamento para dobramento de casos usado com NFKC).

stringprep.map_table_b3(code)

  Retorna o valor mapeado para code de acordo com a tabela B.3 (mapeamento para dobramento de casos usado com nenhuma normalização).

stringprep.in_table_c11(code)

  Determina se code está na tabela C.1.1 (caracteres de espaço ASCII).

stringprep.in_table_c12(code)

  Determina se code está na tabela C.1.2 (caracteres de espaço não-ASCII).

stringprep.in_table_c11_c12(code)

  Determina se code está na tabela C.1 (caracteres de espaço, união de C.1.1 e C.1.2).

stringprep.in_table_c21(code)

  Determina se code está na tabela C.2.1 (caracteres de controle ASCII).

stringprep.in_table_c22(code)

  Determina se code está na tabela C.2.2 (caracteres de controle não-ASCII).

stringprep.in_table_c21_c22(code)

  Determina se code está na tabela C.2 (caracteres de controle, união de C.2.1 e C.2.2).

stringprep.in_table_c3(code)

  Determina se code está na tabela C.3 (uso privado).

stringprep.in_table_c4(code)

  Determina se code está na tabela C.4 (pontos de código não-caracteres).

stringprep.in_table_c5(code)

  Determina se code está na tabela C.5 (códigos substitutos).

stringprep.in_table_c6(code)

  Determina se code está na tabela C.6 (inapropriado para texto simples).

stringprep.in_table_c7(code)

  Determina se code está na tabela C.7 (inapropriado para para representação canônica).

stringprep.in_table_c8(code)

  Determina se code está na tabela C.8 (alteram propriedades de exibição ou estão descontinuadas).

stringprep.in_table_c9(code)

  Determina se code está na tabela C.9 (caracteres de tag).

stringprep.in_table_d1(code)

  Determina se code está na tabela D.1 (Caracteres com propriedade bidirecional “R” ou “AL”).

stringprep.in_table_d2(code)

  Determina se code está na tabela D.2 (Caracteres com propriedade bidirecional “L”).