Para comprender el atributo "codificación", debe comprender la diferencia entre bytes y caracteres .
Piense en los bytes como números entre 0 y 255, mientras que los caracteres son cosas como "a", "1" y "Ä". El conjunto de todos los caracteres disponibles se denomina conjunto de caracteres .
Cada carácter tiene una secuencia de uno o más bytes que se utilizan para representarlo; sin embargo, el número exacto y el valor de los bytes depende de la codificación utilizada y existen muchas codificaciones diferentes.
La mayoría de las codificaciones se basan en un conjunto de caracteres antiguo y una codificación denominada ASCII, que es de un solo byte por carácter (en realidad, solo 7 bits) y contiene 128 caracteres, incluidos muchos de los caracteres comunes que se utilizan en el inglés estadounidense.
Por ejemplo, aquí hay 6 caracteres en el conjunto de caracteres ASCII que están representados por los valores de 60 a 65.
Extract of ASCII Table 60-65
╔══════╦══════════════╗
║ Byte ║ Character ║
╠══════╬══════════════║
║ 60 ║ < ║
║ 61 ║ = ║
║ 62 ║ > ║
║ 63 ║ ? ║
║ 64 ║ @ ║
║ 65 ║ A ║
╚══════╩══════════════╝
En el conjunto ASCII completo, el valor más bajo utilizado es cero y el más alto es 127 (ambos son caracteres de control ocultos).
Sin embargo, una vez que comienza a necesitar más caracteres de los que proporciona el ASCII básico (por ejemplo, letras con acentos, símbolos de moneda, símbolos gráficos, etc.), ASCII no es adecuado y necesita algo más extenso. Necesita más caracteres (un juego de caracteres diferente) y necesita una codificación diferente, ya que 128 caracteres no son suficientes para caber todos los caracteres. Algunas codificaciones ofrecen un byte (256 caracteres) o hasta seis bytes.
Con el tiempo, se han creado muchas codificaciones. En el mundo de Windows, existe CP1252, o ISO-8859-1, mientras que los usuarios de Linux tienden a favorecer UTF-8. Java usa UTF-16 de forma nativa.
Una secuencia de valores de bytes para un carácter en una codificación podría representar un carácter completamente diferente en otra codificación, o incluso podría no ser válida.
Por ejemplo, en la norma ISO 8859-1 , â está representado por un byte de valor 226
, mientras que en UTF-8 que es de dos bytes: 195, 162
. Sin embargo, en ISO 8859-1 , 195, 162
serían dos caracteres, Ã, ¢ .
Piense en XML no como una secuencia de caracteres sino como una secuencia de bytes.
Imagine que el sistema que recibe el XML ve los bytes 195, 162
. ¿Cómo sabe qué personajes son estos?
Para que el sistema interprete esos bytes como caracteres reales (y así los muestre o los convierta a otra codificación), necesita conocer la codificación utilizada en el XML.
Dado que las codificaciones más comunes son compatibles con ASCII, en lo que respecta a los caracteres alfabéticos básicos y los símbolos, en estos casos, la declaración en sí puede salirse con la suya usando solo los caracteres ASCII para decir cuál es la codificación. En otros casos, el analizador debe intentar averiguar la codificación de la declaración. Como sabe que la declaración comienza con <?xml
, es mucho más fácil hacer esto.
Finalmente, el version
atributo especifica la versión XML, de las cuales hay dos en este momento (ver versiones XML de Wikipedia . Hay ligeras diferencias entre las versiones, por lo que un analizador XML necesita saber de qué se trata. En la mayoría de los casos (para inglés altavoces de todos modos), la versión 1.0 es suficiente.