Uma codificação é um mapeamento entre bytes e caracteres de um conjunto de caracteres, portanto, será útil discutir e entender a diferença entre bytes e caracteres .
Pense em bytes como números entre 0 e 255, enquanto caracteres são coisas abstratas como "a", "1", "$" e "Ä". O conjunto de todos os caracteres disponíveis é chamado de conjunto de caracteres .
Cada caractere possui uma sequência de um ou mais bytes usados para representá-lo; no entanto, o número exato e o valor dos bytes dependem da codificação usada e há muitas codificações diferentes.
A maioria das codificações é baseada em um conjunto de caracteres antigo e codificação chamado ASCII, que é um byte único por caractere (na verdade, apenas 7 bits) e contém 128 caracteres, incluindo muitos caracteres comuns usados no inglês dos EUA.
Por exemplo, aqui estão 6 caracteres no conjunto de caracteres ASCII representados pelos valores 60 a 65.
Extract of ASCII Table 60-65
╔══════╦══════════════╗
║ Byte ║ Character ║
╠══════╬══════════════║
║ 60 ║ < ║
║ 61 ║ = ║
║ 62 ║ > ║
║ 63 ║ ? ║
║ 64 ║ @ ║
║ 65 ║ A ║
╚══════╩══════════════╝
No conjunto ASCII completo, o valor mais baixo usado é zero e o mais alto é 127 (ambos são caracteres de controle ocultos).
No entanto, quando você começa a precisar de mais caracteres do que o ASCII básico fornece (por exemplo, letras com acentos, símbolos de moeda, símbolos gráficos etc.), o ASCII não é adequado e você precisa de algo mais extenso. Você precisa de mais caracteres (um conjunto de caracteres diferente) e uma codificação diferente, pois 128 caracteres não são suficientes para caber todos os caracteres. Algumas codificações oferecem um byte (256 caracteres) ou até seis bytes.
Com o tempo, muitas codificações foram criadas. No mundo Windows, existe o CP1252, ou ISO-8859-1, enquanto os usuários do Linux tendem a favorecer o UTF-8. Java usa UTF-16 nativamente.
Uma sequência de valores de bytes para um caractere em uma codificação pode representar um caractere completamente diferente em outra codificação ou pode até ser inválida.
Por exemplo, na norma ISO 8859-1 , â é representado por um byte de valor 226
, ao passo que em UTF-8 é dois bytes: 195, 162
. No entanto, na ISO 8859-1 , 195, 162
haveria dois caracteres, Ã, ¢ .
Quando os computadores armazenam dados sobre caracteres internamente ou os transmitem para outro sistema, eles armazenam ou enviam bytes. Imagine um sistema abrindo um arquivo ou recebendo uma mensagem veja os bytes195, 162
. Como ele sabe quais são esses personagens?
Para que o sistema interprete esses bytes como caracteres reais (e, portanto, os exiba ou os converta em outra codificação), ele precisa conhecer a codificação usada. É por isso que a codificação aparece nos cabeçalhos XML ou pode ser especificada em um editor de texto. Diz ao sistema o mapeamento entre bytes e caracteres.