Щоб зрозуміти атрибут "кодування", ви повинні зрозуміти різницю між байтами та символами .
Розгляньте байти як цифри між 0 і 255, тоді як символи - це такі речі, як "a", "1" та "Ä". Набір усіх доступних символів називається набором символів .
Кожен символ має послідовність одного або декількох байтів, які використовуються для його представлення; однак, точне число та значення байтів залежить від кодування, що використовується, і існує багато різних кодувань.
Більшість кодувань засновані на старому наборі символів та кодуванні під назвою ASCII, що є одним байтом на символ (насправді всього 7 біт) і містить 128 символів, включаючи безліч загальних символів, що використовуються в англійській мові США.
Наприклад, ось 6 символів у наборі символів ASCII, які представлені значеннями від 60 до 65.
Extract of ASCII Table 60-65
╔══════╦══════════════╗
║ Byte ║ Character ║
╠══════╬══════════════║
║ 60 ║ < ║
║ 61 ║ = ║
║ 62 ║ > ║
║ 63 ║ ? ║
║ 64 ║ @ ║
║ 65 ║ A ║
╚══════╩══════════════╝
У повному наборі ASCII найменше використане значення дорівнює нулю, а найвище - 127 (обидва з них є прихованими контрольними символами).
Однак, коли ви починаєте потребувати більше символів, ніж передбачено базовим ASCII (наприклад, листи з наголосами, символи валюти, графічні символи тощо), ASCII не підходить, і вам потрібно щось більш обширне. Вам потрібно більше символів (інший набір символів), і вам потрібно інше кодування, оскільки 128 символів недостатньо, щоб вмістити всіх символів. Деякі кодування мають один байт (256 символів) або до шести байт.
З часом було створено багато кодувань. У світі Windows існує CP1252 або ISO-8859-1, тоді як користувачі Linux, як правило, віддають перевагу UTF-8. Java використовує UTF-16 самовільно.
Одна послідовність значень байтів для символу в одному кодуванні може означати зовсім інший символ в іншому кодуванні або навіть може бути недійсною.
Наприклад, в ISO 8859-1 , â представлений одним байта значення 226
, тоді як в UTF-8 це два байт: 195, 162
. Однак, в ISO 8859-1 , 195, 162
буде два символу, а, ¢ .
Подумайте про XML не як послідовність символів, а як послідовність байтів.
Уявіть, що система, що отримує XML, бачить байти 195, 162
. Звідки відомо, що це символи?
Для того, щоб система інтерпретувала ці байти як фактичні символи (і таким чином відображала їх або перетворювала їх на інше кодування), вона повинна знати кодування, що використовується в XML.
Оскільки найбільш поширені кодування сумісні з ASCII, що стосується основних алфавітних символів та символів, то в цих випадках сама декларація може піти з використання лише символів ASCII, щоб сказати, що таке кодування. В інших випадках аналізатор повинен спробувати розібратися в кодуванні декларації. Оскільки він знає, що декларація починається з <?xml
цього, зробити це набагато простіше.
Нарешті, version
атрибут вказує версію XML, яких наразі існує дві (див. Версії XML Wikipedia . Існують невеликі відмінності між версіями, тому XML-аналізатору необхідно знати, з чим він має справу. У більшості випадків (англійською) динаміки все одно), версії 1.0 достатньо.