Per capire l'attributo "codifica", devi capire la differenza tra byte e caratteri .
Pensa ai byte come numeri compresi tra 0 e 255, mentre i caratteri sono cose come "a", "1" e "Ä". Il set di tutti i caratteri disponibili è chiamato set di caratteri .
Ogni carattere ha una sequenza di uno o più byte che vengono utilizzati per rappresentarlo; tuttavia, il numero e il valore esatti dei byte dipendono dalla codifica utilizzata e ci sono molte codifiche differenti.
La maggior parte delle codifiche si basa su un vecchio set di caratteri e una codifica chiamata ASCII che è un singolo byte per carattere (in realtà, solo 7 bit) e contiene 128 caratteri, inclusi molti dei caratteri comuni utilizzati nell'inglese americano.
Ad esempio, qui ci sono 6 caratteri nel set di caratteri ASCII che sono rappresentati dai valori da 60 a 65.
Extract of ASCII Table 60-65
╔══════╦══════════════╗
║ Byte ║ Character ║
╠══════╬══════════════║
║ 60 ║ < ║
║ 61 ║ = ║
║ 62 ║ > ║
║ 63 ║ ? ║
║ 64 ║ @ ║
║ 65 ║ A ║
╚══════╩══════════════╝
Nel set ASCII completo, il valore più basso utilizzato è zero e il più alto è 127 (entrambi sono caratteri di controllo nascosti).
Tuttavia, una volta che inizi a richiedere più caratteri di quelli forniti dall'ASCII di base (ad esempio, lettere con accenti, simboli di valuta, simboli grafici, ecc.), ASCII non è adatto e hai bisogno di qualcosa di più ampio. Hai bisogno di più caratteri (un set di caratteri diverso) e hai bisogno di una codifica diversa poiché 128 caratteri non sono sufficienti per contenere tutti i caratteri. Alcune codifiche offrono un byte (256 caratteri) o fino a sei byte.
Nel tempo sono state create molte codifiche. Nel mondo Windows, c'è CP1252, o ISO-8859-1, mentre gli utenti Linux tendono a preferire UTF-8. Java utilizza UTF-16 in modo nativo.
Una sequenza di valori di byte per un carattere in una codifica potrebbe rappresentare un carattere completamente diverso in un'altra codifica o potrebbe anche non essere valida.
Ad esempio, in ISO 8859-1 , â è rappresentato da un byte di valore 226
, mentre in UTF-8 è due byte: 195, 162
. Tuttavia, in ISO 8859-1 , 195, 162
sarebbero due caratteri, Ã, ¢ .
Pensa all'XML non come a una sequenza di caratteri ma a una sequenza di byte.
Immagina che il sistema che riceve l'XML veda i byte 195, 162
. Come fa a sapere quali personaggi sono questi?
Affinché il sistema possa interpretare quei byte come caratteri effettivi (e quindi visualizzarli o convertirli in un'altra codifica), deve conoscere la codifica utilizzata nell'XML.
Poiché le codifiche più comuni sono compatibili con ASCII, per quanto riguarda i caratteri alfabetici e i simboli di base, in questi casi, la dichiarazione stessa può farla franca utilizzando solo i caratteri ASCII per dire quale sia la codifica. In altri casi, il parser deve cercare di capire la codifica della dichiarazione. Poiché sa che la dichiarazione inizia con <?xml
, è molto più facile farlo.
Infine, l' version
attributo specifica la versione XML, di cui ce ne sono due al momento (vedi Wikipedia versioni XML . Ci sono lievi differenze tra le versioni, quindi un parser XML deve sapere con cosa ha a che fare. Nella maggior parte dei casi (per l'inglese altoparlanti comunque), la versione 1.0 è sufficiente.