# `email.charset`: Representando conjuntos de caracteres

Código-fonte: Lib/email/charset.py

Este módulo faz parte da API de e-mail legada (`Compat32`). Na nova API, apenas a tabela de apelidos é usada.

O texto restante nesta seção é a documentação original do módulo.

Este módulo fornece uma classe `Charset` para representar conjuntos de caracteres e conversões de conjuntos de caracteres em mensagens de e-mail, bem como um registro de conjuntos de caracteres e vários métodos práticos para manipular esse registro. Instâncias de `Charset` são usadas em vários outros módulos do pacote `email`.

Importa esta classe do módulo `email.charset`.

class email.charset.Charset(input_charset=DEFAULT_CHARSET)

  Mapeia conjuntos de caracteres para suas propriedades de e-mail.

  Esta classe fornece informações sobre os requisitos impostos ao e-mail para um conjunto de caracteres específico. Também fornece rotinas práticas para conversão entre conjuntos de caracteres, considerando a disponibilidade dos codecs aplicáveis. Dado um conjunto de caracteres, ela fará o possível para fornecer informações sobre como usá-lo em uma mensagem de e-mail de forma compatível com RFC.

  Certos conjuntos de caracteres devem ser codificados com quoted-printable ou base64 quando usados em cabeçalhos ou corpos de e-mail. Certos conjuntos de caracteres devem ser convertidos diretamente e não são permitidos em e-mails.

  O input_charset opcional é descrito abaixo; ele é sempre convertido para letras minúsculas. Após ser normalizado por apelido, ele também é usado como uma consulta no registro de conjuntos de caracteres para descobrir a codificação do cabeçalho, a codificação do corpo e o codec de conversão de saída a serem usados para o conjunto de caracteres. Por exemplo, se input_charset for `iso-8859-1`, os cabeçalhos e corpos serão codificados usando quoted-printable e nenhum codec de conversão de saída será necessário. Se input_charset for `euc-jp`, os cabeçalhos serão codificados em base64, os corpos não serão codificados, mas o texto de saída será convertido do conjunto de caracteres `euc-jp` para o conjunto de caracteres `iso-2022-jp`.

  Instâncias `Charset` têm os seguintes atributos de dados:

  input_charset

    O conjunto de caracteres inicial especificado. Apelidos comuns são convertidos em seus nomes de e-mail oficiais (por exemplo, `latin_1` é convertido para `iso-8859-1`). O padrão é `us-ascii` de 7 bits.

  header_encoding

    Se o conjunto de caracteres precisar ser codificado antes de ser usado em um cabeçalho de e-mail, este atributo será definido como `charset.QP` (para quoted-printable), `charset.BASE64` (para codificação base64) ou `charset.SHORTEST` para a codificação mais curta entre QP ou BASE64. Caso contrário, será `None`.

  body_encoding

    O mesmo que header_encoding, mas descreve a codificação do corpo da mensagem de e-mail, que pode ser diferente da codificação do cabeçalho. `charset.SHORTEST` não é permitido para body_encoding.

  output_charset

    Alguns conjuntos de caracteres precisam ser convertidos antes de serem usados em cabeçalhos ou corpos de e-mail. Se input_charset for um deles, este atributo conterá o nome do conjunto de caracteres para o qual a saída será convertida. Caso contrário, será `None`.

  input_codec

    O nome do codec Python usado para converter o input_charset para Unicode. Se nenhum codec de conversão for necessário, este atributo será `None`.

  output_codec

    O nome do codec Python usado para converter Unicode para o output_charset. Se nenhum codec de conversão for necessário, este atributo terá o mesmo valor que o input_codec.

  Instâncias `Charset` também têm os seguintes métodos:

  get_body_encoding()

    Retorna a codificação de transferência de conteúdo usada para codificação do corpo.

    Esta é a string `quoted-printable` ou `base64`, dependendo da codificação usada, ou é uma função, caso em que você deve chamar a função com um único argumento, sendo o objeto Message codificado. A função deve então definir o próprio cabeçalho Content-Transfer-Encoding com o valor apropriado.

    Retorna a string `quoted-printable` se body_encoding for `QP`, retorna a string `base64` se body_encoding for `BASE64` e retorna a string `7bit` caso contrário.

  get_output_charset()

    Retorna o conjunto de caracteres de saída.

    Este é o atributo output_charset se não for `None`, caso contrário, é input_charset.

  header_encode(string)

    Codifica o cabeçalho com a string string.

    O tipo de codificação (base64 ou quoted-printable) será baseado no atributo header_encoding.

  header_encode_lines(string, maxlengths)

    Codifica um cabeçalho de uma string convertendo-a primeiro em bytes.

    Isso é semelhante a `header_encode()`, exceto que a string é ajustada aos comprimentos máximos de linha, conforme fornecido pelo argumento maxlengths, que deve ser um iterador: cada elemento retornado deste iterador fornecerá o próximo comprimento máximo de linha.

  body_encode(string)

    Codifica o corpo com a string string.

    O tipo de codificação (base64 ou quoted-printable) será baseado no atributo body_encoding.

  A classe `Charset` também fornece vários métodos para dar suporte a operações padrão e funções embutidas.

  __str__()

    Retorna input_charset como uma string convertida para minúsculas. `__repr__()` é um apelido para `__str__()`.

  __eq__(other)

    Este método permite que você compare duas instâncias `Charset` para verificar a igualdade.

  __ne__(other)

    Este método permite que você compare duas instâncias `Charset` para verificar a desigualdade.

O módulo `email.charset` também fornece as seguintes funções para adicionar novas entradas ao conjunto global de caracteres, apelidos e registros de codec:

email.charset.add_charset(charset, header_enc=None, body_enc=None, output_charset=None)

  Adiciona propriedades de caracteres ao registro global.

  charset é o conjunto de caracteres de entrada e deve ser o nome canônico de um conjunto de caracteres.

  header_enc e body_enc opcionais são `charset.QP` para quoted-printable, `charset.BASE64` para codificação base64, `charset.SHORTEST` para a codificação mais curta entre quoted-printable ou base64, ou `None` para nenhuma codificação. `SHORTEST` é válido apenas para header_enc. O padrão é `None` para nenhuma codificação.

  output_charset opcional é o conjunto de caracteres que a saída deve conter. As conversões prosseguirão do conjunto de caracteres de entrada para Unicode e para o conjunto de caracteres de saída quando o método `Charset.convert()` for chamado. O padrão é gerar a saída no mesmo conjunto de caracteres da entrada.

  Tanto input_charset quanto output_charset devem ter entradas de codec Unicode no mapeamento de conjunto de caracteres para codec do módulo; use `add_codec()` para adicionar codecs que o módulo não conhece. Consulte a documentação do módulo `codecs` para obter mais informações.

  O registro do conjunto de caracteres global é mantido no dicionário global do módulo `CHARSETS`.

email.charset.add_alias(alias, canonical)

  Adicione um apelido para o conjunto de caracteres. alias é o nome do alias, por exemplo, `latin-1`. canonical é o nome canônico do conjunto de caracteres, por exemplo, `iso-8859-1`.

  O registro global de apelido de conjunto de caracteres é mantido no dicionário global do módulo `ALIASES`.

email.charset.add_codec(charset, codecname)

  Adiciona um codec que mapeia caracteres no conjunto de caracteres fornecido para e a partir do Unicode.

  charset é o nome canônico de um conjunto de caracteres. codecname é o nome de um codec Python, conforme apropriado para o segundo argumento do método `encode()` do `str`.