O que são Encoding e qual deles usar?
Cada um dos caracteres (letras) que você está lendo nesse texto agora, são armazenados no computador em formatos de bytes, cada um desses bytes são representados por valores numéricos binários (ex: 1001). Cada um desses caracteres pode ser armazenado em um ou mais bytes, por isso, cada byte ou sequência de byte representa um determinado caractere.
O Encoding (codificação), é basicamente o processo de tradução dessa sequencia de bytes em caracteres, o que permite que os dados sejam transmitido atraves de uma rede, por exemplo.
Um encoding é um conjunto de regras que define como um caractere é representado em um formato de dados específico de forma eficiente. Isso é muito útil quando você precisa passar informações entre dois sistemas, softwares ou computadores.
Um forma bem simples de entender isso na prática é comparando o alfabeto brasileiro e americano, no brasileiro utilizamos por exemplo o “ç”, já no americano não existe essa letra, por isso se você tiver um texto em português porem utilizando um programa americano é possível que apareça um símbolo diferente indicando
Existem vários tipos de encodings, alguns dos mais utilizados são: UTF-8, UTF-16, ISO-8859–1…. entre outros, para cada encoding existe uma tabela padrão que codifica cada um dos caracteres em um ou mais bytes, porém não é necessário entender cada tabela, mas sim entender para qual tipo de situação cada um deles é utilizado.
O que é Unicode?
O Unicode se refere a um conjunto de qualquer codificação que utiliza da união de códigos para formar um caractere. Ou seja, o Unicode estabelece o padrão de representação dos textos a serem codificados através de um consórcio.
Isso significa que o Unicode foi criado para conter os caracteres de todos os idiomas do mundo, o que facilita realizar a manipulação de qualquer tipo de texto para diversos idiomas através de aplicativos e protocolos.
UTF-8 (Unicode Transformatio Formart)
O UTF-8 é uma das subdivisões do Unicode, que consegue se adaptar melhor para a diversos idiomas, utilizando da mesma base de tabela pra realizar as codificações.
Como ele consegue se adequar a grande maioria dos idiomas, o UTF-8 é o encoding mais utilizado atualmente, e por isso a grande maioria dos programas já vem configurado neste formato.
Cada 1 byte de dado, é composto por 8 bits, cada bits é representado por 0 ou 1, por isso a numeração 8 ao final do nome UTF. Mesmo assim, o UTF pode ter um tamanho variável, ou seja, um único caractere poder ter de 1 até 4 bytes de comprimento.
OBS: em alguns casos extremamente específicos podem chegam até 6 bytes.
UTF-16
O UTF-16, de forma similar ou UTF-8, também pode ter um tamanho variável, porém nesse caso ele pode ter 2 ou 4 bytes de comprimento. Só que nesse caso cada byte é representado por 16 bits.
O UTF-16 consegue representar uma quantidade maior de caracteres do que se comparado ao UTF-8 (65.536 caracteres diferentes), e por isso é mais utilizado em idiomas que contenha mais símbolos, como o caso do mandarim, japonês…
UTF-32
Diferente do UTF-8 e UTF-16, o UTF-32 tem o tamanho fixo de 4 bytes, então independente do caractere que estiver sendo convertido o UTF-32 cada bytes sempre terá a mesma quantidade de bits.
No caso do UFF-32 consegue representar uma quantidade de 4,294,967,296 caracteres diferentes, e por isso acaba sendo mais utilizado em casos mais específicos que dependem de caracteres mais raros.
ASCII (American Standard Code for Information Interchange)
O ASCII é a codificação mais utilizada pela indústria de computadores, já que a grande maioria dos softwares são programados em inglês, ele considera uma cadeia de 7 bytes, mas que não possuem acentuação (por exemplo), e por isso no seu lugar está sendo cada vez mais utilizado o UTF-8.
ANSI (American National Standards Institute)
O ANSI não é um encoding, na verdade ele é similar a nossa ABNT, que determina normas de utilização das codificações, porém muitas das documentações da Microsoft utilizam o termo ANSI, já que é o encoding padrão utilizado nos Estados Unidos e foi estabelecido pelo ANSI, mas que na realidade representa o ASCII que é o encoding utilizado.
ISO 8859–1 ou Latin-1
Também conhecido como latin-1, o ISO 8859–1 é um encoding que é bastante utilizado na nomenclatura de américa latina, em que considera algumas particulares dos idiomas latinos como ç, por exemplo.
O ISO 8859–1, funciona da mesma forma que o UTF-8, cada byte é representado por 8 bits, porém nesse caso, cada caractere representa apenas um único byte.
Existem outras formas de enconding, porém nem todas eles você precisa saber nem conhecer a fundo, já que muitas delas dizem respeito a outros idiomas como o espanhol, francês e mandarim por exemplo.