Página principal » cómo » ¿Por qué los caracteres ingleses necesitan menos bytes para representarlos que los caracteres en otros alfabetos?

    ¿Por qué los caracteres ingleses necesitan menos bytes para representarlos que los caracteres en otros alfabetos?

    Si bien la mayoría de nosotros nunca nos hemos detenido a pensar en ello, los caracteres alfabéticos no son todos del mismo tamaño en el número de bytes que se necesitan para representarlos. Pero ¿por qué es eso? La publicación de preguntas y respuestas de SuperUser de hoy tiene las respuestas a la pregunta de un lector curioso.

    La sesión de Preguntas y Respuestas de hoy nos llega por cortesía de SuperUser, una subdivisión de Stack Exchange, un grupo de sitios web de preguntas y respuestas impulsado por la comunidad..

    Captura de pantalla parcial de ASCII Chart cortesía de Wikipedia.

    La pregunta

    El lector superusuario khajvah quiere saber por qué diferentes alfabetos ocupan diferentes cantidades de espacio en disco cuando se guardan:

    Cuando coloco 'a' en un archivo de texto y lo guardo, tiene un tamaño de 2 bytes. Pero cuando coloco un carácter como 'ա' (una letra del alfabeto armenio), lo convierte en un tamaño de 3 bytes..

    ¿Cuál es la diferencia entre alfabetos en una computadora? ¿Por qué el inglés ocupa menos espacio cuando se guarda??

    Las letras son letras, ¿verdad? ¡Tal vez no! ¿Cuál es la respuesta a este misterio alfabético??

    La respuesta

    Los colaboradores del Superusuario Doktoro Reichard y ernie tienen la respuesta para nosotros. Primero, Doktoro Reichard:

    Uno de los primeros esquemas de codificación que se desarrollarán para su uso en computadoras convencionales es el ASCII (Código Estándar Americano para Intercambio de Información) estándar Fue desarrollado en la década de 1960 en los Estados Unidos..

    El alfabeto inglés utiliza parte del alfabeto latino (por ejemplo, hay pocas palabras acentuadas en inglés). Hay 26 letras individuales en ese alfabeto, sin considerar el caso. Y también tendrían que existir los números individuales y los signos de puntuación en cualquier esquema que pretenda codificar el alfabeto inglés..

    La década de 1960 también fue un momento en que las computadoras no tenían la cantidad de memoria o espacio en disco que tenemos ahora. ASCII fue desarrollado para ser una representación estándar de un alfabeto funcional en todas las computadoras estadounidenses. En ese momento, la decisión de hacer que cada carácter ASCII de 8 bits (1 byte) fuera largo debido a los detalles técnicos del momento (el artículo de Wikipedia menciona el hecho de que la cinta perforada tenía 8 bits en una posición a la vez). De hecho, el esquema ASCII original puede transmitirse usando 7 bits, y el octavo podría usarse para verificaciones de paridad. Los desarrollos posteriores expandieron el esquema ASCII original para incluir varios caracteres acentuados, matemáticos y terminales.

    Con el reciente aumento en el uso de computadoras en todo el mundo, más y más personas de diferentes idiomas tuvieron acceso a una computadora. Eso significaba que, para cada idioma, se debían desarrollar nuevos esquemas de codificación, independientemente de otros esquemas, que podrían entrar en conflicto si se leyeran desde diferentes idiomas..

    Unicode surgió como una solución a la existencia de diferentes terminales al fusionar todos los posibles caracteres significativos en un único conjunto de caracteres abstractos..

    UTF-8 es una forma de codificar el conjunto de caracteres Unicode. Es una codificación de ancho variable (es decir, diferentes caracteres pueden tener diferentes tamaños) y fue diseñada para ser compatible con el esquema ASCII anterior. Como tal, el conjunto de caracteres ASCII tendrá un tamaño de un byte, mientras que cualquier otro carácter tiene un tamaño de dos o más bytes. UTF-16 es otra forma de codificar el conjunto de caracteres Unicode. En comparación con UTF-8, los caracteres se codifican como un conjunto de una o dos unidades de código de 16 bits.

    Como se indica en otros comentarios, el carácter 'a' ocupa un solo byte, mientras que 'ա' ocupa dos bytes, lo que denota una codificación UTF-8. El byte extra en la pregunta original se debió a la existencia de un carácter de nueva línea al final.

    Seguido por la respuesta de ernie:

    1 byte es de 8 bits y, por lo tanto, puede representar hasta 256 (2 ^ 8) valores diferentes.

    Para los idiomas que requieren más posibilidades que esta, no se puede mantener un mapeo simple de 1 a 1, por lo que se necesitan más datos para almacenar un personaje..

    Tenga en cuenta que, en general, la mayoría de las codificaciones utilizan los primeros 7 bits (128 valores) para los caracteres ASCII. Eso deja el octavo bit, o 128 valores más para más caracteres. Agregue caracteres acentuados, idiomas asiáticos, cirílico, etc. y podrá ver fácilmente por qué 1 byte no es suficiente para contener todos los caracteres..


    ¿Tienes algo que agregar a la explicación? Apaga el sonido en los comentarios. ¿Quieres leer más respuestas de otros usuarios de Stack Exchange con experiencia en tecnología? Echa un vistazo a la discusión completa aquí.