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