Значение - <? Xml version = «1.0» encoding = «utf-8»?>

104

Я новичок в XML и пытаюсь понять основы. Я прочитал строку ниже в «Изучение XML», но для меня она все еще непонятна. Может ли кто-нибудь указать мне на книгу или веб-сайт, которые ясно объясняют эти основы?

Из изучения XML :

Объявление XML описывает некоторые из наиболее общих свойств документа, сообщая процессору XML, что ему нужен синтаксический анализатор XML для интерпретации этого документа.

Что это значит?

Я понимаю xml versionчасть - и документ, и пользователь документа должны «разговаривать» в одной и той же версии XML. Но как насчет этой encodingчасти? Зачем это нужно?

XML Boy
источник
Возможный дубликат Какая польза от «кодировки» в заголовке XML?
Джонатан Леффлер

Ответы:

128

Чтобы понять атрибут "кодировка", вы должны понимать разницу между байтами и символами .

Думайте о байтах как о числах от 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 вполне достаточно.

дом
источник
9
«Сам заголовок использует кодировку ASCII»: я думаю, вы имеете в виду объявление XML. Он закодирован так же, как и весь документ; UTF-16 или еще много чего. XML-процессор может сделать несколько проб, пока не сможет прочитать спецификацию кодирования.
Том Блоджет
1
У меня создалось впечатление, что преамбула / пролог должны были быть закодированы в UTF-8, и это указывало синтаксическому анализатору, как преобразовать оставшиеся байты (фактический XML-документ) в правильную кодировку. Опять не так! :-)
Kelly Beard
5
Предлагаем прочитать: joelonsoftware.com/2003/10/08/…
Судип Бхандари
26

Объявление XML не требуется во всех документах XML; однако авторам документов XHTML настоятельно рекомендуется использовать объявления XML во всех своих документах. Такое объявление требуется, если кодировка символов документа отличается от UTF-8 или UTF-16 по умолчанию и никакая кодировка не была определена протоколом более высокого уровня. Вот пример документа XHTML. В этом примере включено объявление XML.

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE html 
 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Virtual Library</title>
  </head>
  <body>
    <p>Moved to <a href="http://example.org/">example.org</a>.</p>
 </body>
</html>

См. Стандарты W3 для XML .

Паван
источник
4
что xml ссылается на xhtml. вы имели в виду ссылку на xml w3.org/TR/xml или вы хотели назвать ссылку xhtml?
jrwren
Xhtml относится к документации xml. Объявление типа документа не требуется для правильно сформированного xml.
xvan
«См. Стандарты W3 для XML». IOW, прочтите faqing faq, это длинный длинный документ. Почему люди не могут просто объяснить, что такое "?" делает и почему это там ???
Blessed Geek
3

Это необязательная преамбула XML .

  • version="1.0" означает, что это стандарт XML, которому этот файл соответствует
  • encoding="utf-8" означает, что файл закодирован с использованием кодировки Unicode UTF-8
Одед
источник
2

Может ли кто-нибудь указать мне на книгу или веб-сайт, которые ясно объясняют эти основы?

Вы можете проверить это руководство по XML с примерами.

Но как насчет кодирования? Зачем это нужно?

W3C дает объяснение о кодировании:

«Набор символов документа для XML и HTML 4.0 - это Unicode (он же ISO 10646). Это означает, что браузеры HTML и процессоры XML должны вести себя так, как если бы они использовали Unicode внутри. Но это не означает, что документы должны передаваться в Unicode. Пока клиент и сервер согласовывают кодировку, они могут использовать любую кодировку, которая может быть преобразована в Unicode ... "

О.Бадр
источник
-1

Объявление XML в карте документа состоит из следующего:

The version number, ?xml version="1.0"?. 

Это обязательно. Хотя номер может измениться для будущих версий XML, текущая версия 1.0.

Объявление кодировки,

encoding="UTF-8"?

Это необязательно. Если используется, объявление кодировки должно появиться сразу после информации о версии в объявлении XML и должно содержать значение, представляющее существующую кодировку символов.

кшама сингх
источник