Чтобы понять атрибут "кодировка", вы должны понимать разницу между байтами и символами .
Думайте о байтах как о числах от 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 Википедии . Между версиями есть небольшие различия, поэтому синтаксический анализатор XML должен знать, с чем он имеет дело. В большинстве случаев (для английского языка динамики все равно), версии 1.0 вполне достаточно.