O que é Encoding? Já Ouviu Falar que o Computador só entende 0 e 1? Entenda Agora!

Você sabe o que é encoding? Já tentou abrir um texto e por algum motivo boa parte dele ficou com caracteres estranhos? Vem que eu te mostro!

Encoding é o sistema que define como cada caractere (letra, número ou símbolo) é representado por sequências de 0 e 1 que o computador entende. Como existem vários padrões, ler um texto com o encoding errado gera caracteres estranhos. O padrão mais usado hoje é o UTF-8 (Unicode), que cobre praticamente todos os caracteres.

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Resumo do vídeo: a aula explica o que é encoding e por que alguns textos abrem com caracteres estranhos. Você entende como o computador representa letras em sequências de 0 e 1, as limitações da tabela ASCII com acentos, o papel do padrão Unicode (UTF-8) e como corrigir o erro no Python informando o encoding correto ao abrir o arquivo.

Neste vídeo você aprende:

  • o que é encoding e por que o computador só entende 0 e 1;
  • por que aparecem caracteres estranhos ao ler um texto;
  • o que é a tabela ASCII e por que ela não cobre acentos;
  • o que é o padrão Unicode (UTF-8, UTF-16 e UTF-32);
  • como corrigir o erro definindo encoding=’utf-8′ ao abrir o arquivo;
  • como usar a função ord() para consultar um caractere.

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

O que Significa Encoding?

Vamos lá, alguém já deve ter dito que o computador só entende 0 e 1? Ou algo do tipo certo?

Você já teve dúvidas a respeito disso?

É sobre isso que vamos falar hoje!

Para isso vamos precisar de um arquivo de texto, este arquivo que vamos usar esta disponível para download, é um arquivo simples com uma frase:

Texto de exemplo
Texto de exemplo

Observe que no texto da imagem acima temos um acento onde está escrito “o que é”.

Vamos usar um código no Python para extrair e printar este texto e quando fizermos isso, o código vai nos retornar um erro ou vamos notar uma parte do texto ilegível.

Para entender melhor o porquê deste erro, vamos explicar o que o nosso código está fazendo:

O que é encoding
With open.

Quando o código printa a frase contida no texto, vamos ver um erro na palavra “é”.

Este erro pode simplesmente aparecer ilegível ou com uma mensagem “UnicodeDecodeError” por exemplo:

O que Significa Encoding?
UnicodeDecodeError

Quando nós armazenamos uma informação de texto em algum lugar do computador, seja em uma variável ou pasta, banco de dados ou planilhas, seja aonde for, temos que entender que o computador não reconhece textos.

Isso mesmo! O computador além de não reconhecer textos também não reconhece números, para o computador tudo isso é uma sequência de zero e um:

0101010101010101010101010101….

Para exemplificar como o computador vê uma letra, a letra “a” pode ser vista assim -> 0110 0001.

De onde vem essa sequência de números? Como o computador sabe que determinada sequência representa a letra “a”?

É aqui que entra o Encoding, quando toda a lógica do computador estava sendo criada uma das primeiras coisas que inventaram foi uma tabela de “Sinais Gráficos (imprimíveis)”:

O que Significa Encoding?
Sinais gráficos imprimíveis.

Fonte: https://pt.wikipedia.org/wiki/ASCII

Nesta tabela temos o que cada sequência de zero e um significa:

00100000 significa (espaço) por exemplo.

Mas, temos um problema que surge devido ao computador enxergar as informações desta maneira…

O problema é que nesta tabela não temos caracteres como temos no português, o “a” com acento agudo, com til, com acento circunflexo, etc.

Ícone PythonPython Impressionador

Você vai aprender a linguagem de Programação que mais cresce no Mundo para fazer automações incríveis, desenvolver sites, fazer análises de dados, trabalhar com Ciência de Dados, Inteligência Artificial, mesmo que você nunca tenha tido nenhum contato com Programação na vida.

Black Friday · Lote Especial · Lote 1 · Último Lote

De R$ 1.497 56% OFF54% OFF53% OFF

por 12x R$ 6467,5069

Preço do Lote Especial até 13/11, às 23h59Último dia do Lote Especial: o preço vale até hoje, às 23h59Preço do Lote 1 até 20/11, às 23h59Último dia do Lote 1: o preço vale até hoje, às 23h59Preço do Último Lote até 27/11, às 23h59Último dia do Último Lote: o preço vale até hoje, às 23h59

Começar agoraQuero a oferta de Black FridaySeta para a direita
Fundo PythonTelas Python
Luz Python

Por este motivo começaram a criar dezenas de padrões de Encoding, programadores brasileiros criaram um Encoding para o Brasil, os americanos criaram um para os Estados Unidos, os chineses para a China, etc.

O que isso causou foi a existência de vários padrões de escrita diferentes associados a mesma sequência de zero e um, uma sequência de “zero e um” no Brasil pode representar a letra “b” enquanto a mesma sequência na Irlanda representa outra letra e pode ser que a mesma sequência na China nem exista…

Por este motivo temos esses erros no código, se estivermos lendo um arquivo que está sendo processado por um padrão de Encoding diferente do correto para a linguagem do texto o resultado vai ser uma interpretação errada da sequência de zero e um que aquele texto possui, então ele mostra um caractere aleatório, ou uma mensagem de erro.

Padrão Unicode:

Você já viu estes códigos?

  • Utf-8
  • Utf-16
  • Utf-32

Estes são padrões Unicode, a lógica aqui é criar um único código que permita fazer traduções de qualquer coisa.

É possível traduzir do padrão americano para o português brasileiro passando pelo Unicode, por exemplo.

Se você observar a tabela do Unicode tem muito mais caracteres do que a tabela do Encoding, temos letras, símbolos, sinais, números, etc.

Decimal.
Decimal.

Fonte: https://en.wikipedia.org/wiki/List_of_Unicode_characters

Em termos práticos se o seu texto veio com caracteres desconhecidos ou com código de erro, isso não significa que os dados estão corrompidos, apenas não está com o padrão de Encoding correto para o texto que você está manipulando.

Opção de ajuste no Python:

Caso esse erro aconteça no seu código você consegue corrigir acrescentando o Encoding como na imagem abaixo -> dentro das aspas podemos colocar qualquer um dos padrões (codec) disponíveis na tabela de padrões do Python.

Ajuste.
Ajuste.

Tabela de padrão do Python:

Codec - Python.
Codec – Python.

Fonte: https://docs.python.org/3/library/codecs.html#standard-encodings

O padrão mais usado é o utf-8, se no exemplo desta aula passarmos este padrão para o código, já é o suficiente para que o texto seja exibido corretamente.

Mas e se eu não souber em que padrão o texto foi escrito? Como escolher o padrão correto se houver erro?

Normalmente os editores de texto tentam deixar esse padrão identificado, até mesmo no próprio bloco de notas:

UTF-8
UTF-8

Existem métodos dentro da linguagem de programação que tentam identificar este padrão, às vezes acertam, às vezes não…

Se a previsão errar, é necessário tentar novamente tomando o cuidado de não salvar uma informação no padrão errado e ler em outro formato, provavelmente você irá corromper aquela informação.

Você também consegue consultar a posição na lista de qualquer caractere dentro do Python usando o “ord”.

Pesquisa.
Pesquisa.

Na tabela de Encoding Python temos uma coluna chamada “decimal”, o caractere “ã” vai estar na posição 227 desta coluna. Assim é possível consultar qualquer caractere.

Esta é a importância de entendermos o que é Encoding, agora sabemos como corrigir estes erros e que não se trata de o arquivo estar corrompido.

Gostou da aula?

Quer aprender passo a passo como montamos o código para extrair textos de tabelas ou blocos no Python? Clique no link!

Perguntas frequentes

1. Por que aparecem caracteres estranhos ao abrir um texto?

Isso acontece quando o arquivo é lido com um padrão de encoding diferente do que foi usado para salvá-lo. A mesma sequência de 0 e 1 representa caracteres diferentes em cada padrão, então o texto aparece ilegível ou gera erro. Não significa que o arquivo está corrompido, apenas mal interpretado.

2. Como definir o encoding ao abrir um arquivo no Python?

No Python, ao abrir um arquivo com a função open(), informe o parâmetro encoding, como em open(‘arquivo.txt’, encoding=’utf-8′). O utf-8 é o padrão mais comum e costuma resolver a maioria dos casos. Se o texto vier de outra origem, teste padrões como latin1 até o texto ser exibido corretamente.

3. O que é UTF-8?

O UTF-8 é um padrão de codificação Unicode, ou seja, um sistema único capaz de representar praticamente qualquer caractere de qualquer idioma. Ele inclui letras, símbolos, sinais e acentos do português, como ‘ã’ e ‘é’. Por ser universal e compatível, é o encoding mais recomendado ao trabalhar com textos em Python.

4. Qual a diferença entre encoding e Unicode?

O encoding é qualquer padrão que associa caracteres a sequências de 0 e 1; existiram dezenas deles, um por região, o que causava conflitos. O Unicode é um padrão universal criado para unificar tudo, permitindo traduzir entre sistemas. Formatos como UTF-8, UTF-16 e UTF-32 são implementações do Unicode.

Conclusão – O que é Encoding

O objetivo desta aula foi mostrar o que é e para que serve o Encoding.

Saber o seu significado vai te ajudar a manipular textos de forma correta e a entender erros que acontecem quando trabalhamos com textos em programação.

Além disso, explicamos o conceito de Unicode, como pesquisar caracteres dentro do Python e como corrigir erros de textos ilegíveis ou de mensagens de erro.

Espero ter ajudado! Até a próxima! Abraço,

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?