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