Para entender o atributo "encoding", você precisa entender a diferença entre bytes e caracteres .
Pense nos bytes como números entre 0 e 255, enquanto os caracteres são coisas como "a", "1" e "Ä". O conjunto de todos os caracteres disponíveis é denominado conjunto de caracteres .
Cada caractere possui uma sequência de um ou mais bytes que são usados para representá-lo; no entanto, o número e valor exatos dos bytes dependem da codificação usada e existem muitas codificações diferentes.
A maioria das codificações é baseada em um antigo conjunto de caracteres e codificação chamado ASCII, que é um único byte por caractere (na verdade, apenas 7 bits) e contém 128 caracteres, incluindo muitos dos caracteres comuns usados no inglês dos Estados Unidos.
Por exemplo, aqui estão 6 caracteres no conjunto de caracteres ASCII que são 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 de uma codificação diferente, pois 128 caracteres não são suficientes para acomodar 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 do Windows, existe o CP1252 ou ISO-8859-1, enquanto os usuários do Linux tendem a preferir o UTF-8. Java usa UTF-16 nativamente.
Uma sequência de valores de byte 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, no ISO 8859-1 , 195, 162
seriam dois caracteres, Ã, ¢ .
Pense no XML não como uma sequência de caracteres, mas como uma sequência de bytes.
Imagine que o sistema que recebe o XML vê os bytes 195, 162
. Como ele sabe quais são esses personagens?
Para que o sistema interprete esses bytes como caracteres reais (e assim exiba-os ou converta-os em outra codificação), ele precisa saber a codificação usada no XML.
Uma vez que as codificações mais comuns são compatíveis com ASCII, no que diz respeito a caracteres alfabéticos básicos e símbolos, nesses casos, a própria declaração pode escapar usando apenas os caracteres ASCII para dizer qual é a codificação. Em outros casos, o analisador deve tentar descobrir a codificação da declaração. Uma vez que sabe, a declaração começa com<?xml
, é muito mais fácil fazer isso.
Por fim, o version
atributo especifica a versão XML, das quais existem duas no momento (consulte as versões XML da Wikipedia . Existem pequenas diferenças entre as versões, então um analisador XML precisa saber com o que está lidando. Na maioria dos casos (para inglês falantes de qualquer maneira), a versão 1.0 é suficiente.