Una codificación es una asignación entre bytes y caracteres de un conjunto de caracteres, por lo que será útil analizar y comprender la diferencia entre bytes y caracteres. .
Piense en los bytes como números entre 0 y 255, mientras que los caracteres son elementos abstractos 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 hay muchas codificaciones diferentes.
La mayoría de las codificaciones se basan en un antiguo conjunto de caracteres y codificación llamada ASCII, que es un byte único por carácter (en realidad, solo 7 bits) y contiene 128 caracteres, incluidos muchos de los caracteres comunes utilizados en inglés de EE. UU.
Por ejemplo, aquí hay 6 caracteres en el conjunto de caracteres ASCII que están representados por los valores 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 comience 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 conjunto de caracteres diferente) y una codificación diferente, ya que 128 caracteres no son suficientes para 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, hay 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 byte para un carácter en una codificación podría representar un carácter completamente diferente en otra codificación, o incluso podría ser inválido.
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, Ã, ¢ .
Cuando las computadoras almacenan datos acerca de los caracteres internamente o los transmiten a otro sistema, almacenan o envían bytes. Imagine que un sistema que abre un archivo o recibe un mensaje ve los bytes195, 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. Es por eso que la codificación aparece en los encabezados XML o se puede especificar en un editor de texto. Le dice al sistema la asignación entre bytes y caracteres.