Pour comprendre l'attribut "encoding", vous devez comprendre la différence entre les octets et les caractères .
Considérez les octets comme des nombres entre 0 et 255, tandis que les caractères sont des choses comme "a", "1" et "Ä". L'ensemble de tous les caractères disponibles est appelé un jeu de caractères .
Chaque caractère a une séquence d'un ou plusieurs octets qui sont utilisés pour le représenter; cependant, le nombre exact et la valeur des octets dépendent du codage utilisé et il existe de nombreux codages différents.
La plupart des encodages sont basés sur un ancien jeu de caractères et encodage appelé ASCII qui est un seul octet par caractère (en fait, seulement 7 bits) et contient 128 caractères dont beaucoup des caractères courants utilisés en anglais américain.
Par exemple, voici 6 caractères dans le jeu de caractères ASCII qui sont représentés par les valeurs 60 à 65.
Extract of ASCII Table 60-65
╔══════╦══════════════╗
║ Byte ║ Character ║
╠══════╬══════════════║
║ 60 ║ < ║
║ 61 ║ = ║
║ 62 ║ > ║
║ 63 ║ ? ║
║ 64 ║ @ ║
║ 65 ║ A ║
╚══════╩══════════════╝
Dans l'ensemble ASCII complet, la valeur la plus basse utilisée est zéro et la plus élevée est 127 (les deux sont des caractères de contrôle masqués).
Cependant, une fois que vous commencez à avoir besoin de plus de caractères que l'ASCII de base fournit (par exemple, des lettres avec des accents, des symboles monétaires, des symboles graphiques, etc.), l'ASCII ne convient pas et vous avez besoin de quelque chose de plus complet. Vous avez besoin de plus de caractères (un jeu de caractères différent) et vous avez besoin d'un codage différent car 128 caractères ne suffisent pas pour contenir tous les caractères. Certains codages offrent un octet (256 caractères) ou jusqu'à six octets.
Au fil du temps, de nombreux encodages ont été créés. Dans le monde Windows, il existe CP1252, ou ISO-8859-1, alors que les utilisateurs de Linux ont tendance à privilégier UTF-8. Java utilise UTF-16 de manière native.
Une séquence de valeurs d'octet pour un caractère dans un codage peut représenter un caractère complètement différent dans un autre codage, ou peut même être invalide.
Par exemple, dans la norme ISO 8859-1 , â est représenté par un octet de valeur 226
, alors que dans UTF-8 , il est deux octets: 195, 162
. Cependant, dans ISO 8859-1 , il y 195, 162
aurait deux caractères, Ã, ¢ .
Considérez XML comme non pas une séquence de caractères mais une séquence d'octets.
Imaginez que le système recevant le XML voit les octets 195, 162
. Comment sait-il de quels personnages il s'agit?
Pour que le système interprète ces octets comme des caractères réels (et ainsi les affiche ou les convertit en un autre codage), il doit connaître le codage utilisé dans le XML.
Étant donné que les codages les plus courants sont compatibles avec ASCII, en ce qui concerne les caractères alphabétiques de base et les symboles, dans ces cas, la déclaration elle-même peut s'en tirer en utilisant uniquement les caractères ASCII pour dire quel est le codage. Dans d'autres cas, l'analyseur doit essayer de comprendre le codage de la déclaration. Puisqu'il sait que la déclaration commence par, <?xml
il est beaucoup plus facile de le faire.
Enfin, l' version
attribut spécifie la version XML, dont il y en a deux pour le moment (voir les versions XML de Wikipedia . Il existe de légères différences entre les versions, donc un analyseur XML doit savoir de quoi il s'agit. Dans la plupart des cas (pour l'anglais haut-parleurs de toute façon), la version 1.0 suffit.