encode() em Python
No mundo em que vivemos, um bom aplicativo precisa ser desenvolvido de forma internacionalizada. Ou seja, ele deve lidar com uma ampla variedade de caracteres, idiomas e também incluir uma variedade de símbolos emojis. Para possibilitar essa versatilidade, o Python usa o padrão Unicode para representar caracteres em strings. Isso permite que os programas Python trabalhem com todos os diferentes caracteres possíveis.
Strings armazenadas como Unicode
Um caractere é o menor componente possível de um texto. Evidentemente, dependendo do idioma, os caracteres variam. Desde o Python 3.0, as strings são armazenadas como Unicode. Uma string Unicode é uma sequência de pontos de código. O padrão Unicode descreve como os caracteres são representados por pontos de código, os quais variam de 0 a 0x10FFFF.
Para armazenamento eficiente de strings, a sequência de pontos de código precisa ser representada na memória como um conjunto de unidades de código. As unidades de código são mapeadas para bytes de 8 bits. As regras para traduzir uma string Unicode em uma sequência de bytes são chamadas de codificação de caracteres ou apenas codificação.
Existem várias formas de codificação. Cada uma trata uma string de uma maneira própria. As codificações populares são UTF-8, ASCII, etc. Usando o método encode(), as strings podem ser convertidas em qualquer codificação suportada pelo Python. Por padrão, o Python usa a codificação UTF-8.
encode() em Código
A sintaxe geral para codificar uma string é:
string.encode(encoding, errors)
Nessa sintaxe, uma string de entrada é codificada (encoding) usando o padrão de codificação especificado. O argumento errors é opcional e define o comportamento a ser seguido se, por acaso, a codificação falhar Se o argumento de codificação for deixado em branco, o padrão UTF-8 será usado como exemplificado abaixo:
# Codificação padrão com UTF-8
string = "pythön"
string_utf = string.encode()
print('A versão codificada é:', string_utf)
# resultado: A versão codificada é: b'pyth\xc3\xb6n'
Para especificar a forma de codificação, basta escrever seu nome:
# Codificação padrão com UTF-8 escrita de forma explicita
string = "pythön"
string_utf = string.encode("utf-8")
print('A versão codificada é:', string_utf)
# resultado: A versão codificada é: b'pyth\xc3\xb6n'
O resultado convertido tem formato de bytes, o que pode ser verificado como mostrado abaixo:
print(type(string_utf))
# resultado:
Lidando com erros de codificação
Nem todo caractere pode ser codificado com qualquer codificação. Vários caracteres especiais como acentuação, por exemplo, não podem ser codificados em ASCII. Para lidar com esses casos, o Python oferece vários métodos para ignorar ou substituir caracteres. A seguir, exploraremos alguns desses métodos em código.
strict
strict: opção padrão que gera UnicodeDecodeError em caso de falha. No exemplo abaixo, tentamos codificar uma string usando ASCII, que não codifica caracteres acentuados como o do exemplo. O resultado é um erro UnicodeDecodeError.
string = "pythön"
print(string.encode(encoding="ascii", errors="strict"))
# resultado: UnicodeEncodeError: 'ascii' codec can't encode character '\xf6' in position 4: ordinal not in range(128)
Veja que especificamos explicitamente o método de erro, mas isso não seria necessário nesse caso, pois strict é a opção default do encode().
ignore
ignore: ignora o Unicode não codificável do resultado.
string = "pythön"
print(string.encode(encoding="ascii", errors="ignore")) # ignora erros
# resultado: b'pythn'
replace
replace: substitui todos os caracteres Unicode não codificáveis por um ponto de interrogação (?).
string = "pythön"
print(string.encode(encoding="ascii", errors="replace")) # substitui por ?
# resultado: b'pyth?n'
backslashreplace
backslashreplace: insere uma sequência de escape de barra invertida (\uNNNN) em vez de caracteres Unicode não codificáveis.
string = "pythön"
print(string.encode(encoding="ascii", errors="backslashreplace")) # substitui caractere
# resultado: b'pyth\\xf6n'
namereplace
string = "pythön"
print(string.encode(encoding="ascii", errors="namereplace")) # substitui caractere por nome em latim
# b'pyth\\N{LATIN SMALL LETTER O WITH DIAERESIS}n'
Veja também:
Encontrou algum erro ou quer fazer uma sugestão? Por favor, entre em contato usando nosso formulário de contatos.