Веб и кодирование

Кодировка XML: UTF-8, UTF-16 и XML-декларация

Объявление кодировки XML описывает, как байты документа представляют символы. Оно должно соответствовать байтам и авторитетным метаданным транспорта.

Опубликовано

XML-декларация и имя кодировки

При наличии XML-декларация находится в начале документа. Значение encoding называет фактическую кодировку символов сущности документа; само по себе оно не преобразует байты.

<?xml version="1.0" encoding="UTF-8"?>
<message>Ready</message>

UTF-8 и UTF-16

КодировкаПолезные свойстваТребование XML
UTF-8Совместима с ASCII и обычно компактна для текста с преобладанием латиницыКаждый соответствующий стандарту XML-процессор должен её принимать
UTF-16Использует 16-битные кодовые единицы; порядок байтов можно определить отдельноКаждый соответствующий стандарту XML-процессор должен её принимать

Что происходит, если кодировка не указана

При отсутствии авторитетных внешних сведений о кодировке документ без метки порядка байтов и объявления кодировки должен использовать UTF-8. Обычный текст только из ASCII также является корректным UTF-8.

Транспортный протокол, например HTTP, может предоставить внешние сведения о кодировке, поэтому проверяйте вместе байты, декларацию и метаданные транспорта.

Метка порядка байтов и определение UTF-16

Сущность XML в UTF-16 должна начинаться с метки порядка байтов, если механизм более высокого уровня не определяет этот порядок. UTF-8 может использовать BOM, но это не обязательно.

BOM — это сигнатура кодировки, а не текст документа.

Почему несовпадение кодировки приводит к ошибке

Declared: UTF-8
Actual bytes: Windows-1251
Result: decoding error or corrupted text
  • Сохраняйте файл в кодировке, названной в декларации.
  • Передавайте совместимые метаданные HTTP Content-Type.
  • Декодируйте загруженные байты до передачи текста браузерному конвертеру.
  • Не исправляйте нечитаемые символы заменой после декодирования с потерями.

Проверьте пример

Разберите документ с объявленным UTF-8

Unicode-значение сохраняется после правильного декодирования XML-текста.

<?xml version="1.0" encoding="UTF-8"?><message>Привет, €</message>

Ожидаемый результат: JSON-результат сохраняет кириллицу и знак евро.

Проверьте разобранный документ

Преобразуйте XML после проверки кодировки

Правильно декодируйте файл, затем вставьте полученный XML-текст и локально проверьте его отображение в JSON.

Перейти в XML to JSON Converter →