2011-04-14 2 views
6

Что такое кодирование в XML? Обычным кодированием является utf-8. Чем она отличается от другой кодировки? Какова цель его использования?Что такое кодирование в XML?

+0

См. W3C [рекомендация по кодированию] (http://www.w3.org/TR/xml/#charencoding). – Nishant

+0

@Nishant: это не очень хорошее введение в тему кодировок символов в целом. И я думаю, что это вопрос. –

+0

Я только что добавил спецификации XML, как указано OP, «обычная кодировка - UTF-8». Это не должно быть ответом. – Nishant

ответ

8

character encoding определяет, как символы отображаются на байт. Поскольку XML-документы хранятся и передаются в виде потоков байтов, это необходимо для представления символов Unicode, которые составляют XML-документ.

UTF-8 выбран по умолчанию, так как он имеет ряд преимуществ:

  • она совместима с ASCII в этом корректное ASCII текста в кодировке также действительны UTF-8 кодируются (но не обязательно наоборот !)
  • он использует только 1 байт на символ для «простых» букв (те, которые существуют также в ASCII)
  • он может представлять все существующие символы Юникода

Кодировки символов - это более общая тема, чем просто XML. UTF-8 - , а не, ограниченным использованием только в XML.

What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text - хорошая статья, которая дает хороший обзор по этой теме.

2

Документы XML могут содержать символы не ASCII, такие как норвежский æ ø å или French ê è é. Таким образом, чтобы избежать ошибок, вы устанавливаете кодировку или сохраняете XML-файл как Unicode.

XML Encoding Rules

1

Когда данные хранятся или передаются, это всего лишь байты. Эти байты требуют некоторой интерпретации. У пользователей с неанглийскими языками были проблемы с символами, которые появились только в их локали. Эти персонажи отображались неправильно.

С XML, имеющим информацию о том, как интерпретировать его байтовый символ, может отображаться корректно.

+3

Обратите внимание, что сам английский язык также имел проблемы. [ASCII] (http://cstheory.stackexchange.com/questions/2066/difference-between-np-hard-and-np-complete) и [EBCDIC] (http://en.wikipedia.org/wiki/Extended_Binary_Coded_Decimal_Interchange_Code), например, используют совершенно разные кодировки даже для «нормальных» английских символов. Кодирование не только для «остального мира» ;-) –

+2

@Joachim: Очень согласен. Гиперконсервативное и реакционное представление о том, что ASCII было достаточно для наших бабушек и дедушек, поэтому оно должно быть достаточно хорошим для нас, это смехотворно недальновидно - и подделка. Но ужасно распространено. – tchrist

4

Когда компьютеры были сначала созданы, они в основном работали только с символами, найденными на английском языке, что привело к 7-разрядному стандарту US-ASCII.

Однако в мире существует много разных письменных языков, и необходимо найти способы использовать их в компьютерах.

Первый способ работает отлично, если вы ограничиваете себя определенным языком, это использование кодирования, специфичного для культуры, такого как ISO-8859-1, который может представлять символы латинско-европейского языка на 8 бит или GB2312 для китайских персонажей.

Второй способ немного сложнее, но теоретически может представлять каждый символ в мире, это стандарт Юникода, в котором каждый символ из каждого языка имеет конкретный код. Однако, учитывая большое количество существующих символов (109 000 в Юникоде 5), символы Юникода обычно представлены с использованием трехбайтового представления (один байт для плоскости Юникода и два байта для символьного кода.

Для того чтобы максимизировать совместимость с существующим кодом (некоторые все еще используют текст в ASCII), стандартная кодировка UTF-8 была разработана как способ сохранить символы Юникода, используя только минимальное пространство, как описано в ответе Йоахима Зауэра.

Таким образом, обычно просматриваются файлы, закодированные с помощью определенных кодировок, таких как ISO-8859-1, если файл предназначен для редактирования или чтения только программным обеспечением (и людьми), понимающим только эти языки, и UTF-8, когда есть необходимость иметь высокую интероперабельность и независимость от культуры. Нынешняя тенденция заключается в том, что UTF-8 заменяет другие кодировки, хотя им нужна работа от разработчиков программного обеспечения, поскольку строки UTF-8 сложнее обрабатывать, чем строки набора символов фиксированной ширины.

+1

Юникод также необходим для любительских видов знаков препинания и символов, таких как '¢ £ '' и' curly quotes 'и т. Д. Для Unicode не требуется существенно сложнее работать, если язык программирования начинается с Unicode в качестве базового набора символов; то вам не нужно беспокоиться о кодировании переменной ширины - или не должно. – tchrist

Смежные вопросы