in

¿Cuál es la diferencia entre ASCII y Unicode?

apple touch icon@2

Comprensión por qué ASCII y Unicode se crearon en primer lugar y me ayudaron a comprender las diferencias entre los dos.

ASCII, Orígenes

Como se indica en las otras respuestas, ASCII usa 7 bits para representar un carácter. Al usar 7 bits, podemos tener un máximo de 2 ^ 7 (= 128) combinaciones distintas*. Lo que significa que podemos representar un máximo de 128 caracteres.

Espera, ¿7 bits? Pero, ¿por qué no 1 byte (8 bits)?

El último bit (octavo) se utiliza para evitar errores como bit de paridad. Esto fue relevante hace años.

La mayoría de los caracteres ASCII son caracteres imprimibles del alfabeto, como abc, ABC, 123,? & !, etc. Los demás son personajes de control como retorno de carro, salto de línea, tabulación, etc.

Vea a continuación la representación binaria de algunos caracteres en ASCII:

0100101 -> % (Percent Sign - 37)
1000001 -> A (Capital letter A - 65)
1000010 -> B (Capital letter B - 66)
1000011 -> C (Capital letter C - 67)
0001101 -> Carriage Return (13)

Ver la tabla ASCII completa aqui.

ASCII fue diseñado solo para inglés.

¿Qué? ¿Por qué solo en inglés? ¡Tantos idiomas por ahí!

Porque el centro de la industria informática estaba en Estados Unidos en ese momento. Como consecuencia, no necesitaban admitir acentos u otras marcas como á, ü, ç, ñ, etc. (también conocido como diacríticos).

ASCII extendido

Algunas personas inteligentes comenzaron a usar el octavo bit (el bit que se usa para la paridad) para codificar más caracteres para admitir su idioma (para admitir «é», en francés, por ejemplo). Con solo usar un bit adicional, se duplicó el tamaño de la tabla ASCII original para mapear hasta 256 caracteres (2 ^ 8 = 256 caracteres). Y no 2 ^ 7 como antes (128).

10000010 -> é (e with acute accent - 130)
10100000 -> á (a with acute accent - 160)

El nombre de este «ASCII extendido a 8 bits y no a 7 bits como antes» podría denominarse simplemente «ASCII extendido» o «ASCII de 8 bits».

Como @Tom señaló en su comentario a continuación, no existe tal cosa como «ASCII extendido«Sin embargo, esta es una manera fácil de referirse a este truco de 8 bits. Hay muchas variaciones de la tabla ASCII de 8 bits, por ejemplo, la ISO 8859-1, también llamado ISO Latin-1.

Unicode, el ascenso

ASCII Extended resuelve el problema de los idiomas que se basan en el alfabeto latino … ¿qué pasa con los demás que necesitan un alfabeto completamente diferente? ¿Griego? ¿Ruso? ¿Chino y similares?

Habríamos necesitado un conjunto de caracteres completamente nuevo … eso es lo racional detrás de Unicode. Unicode no contiene todos los caracteres de todos los idiomas, pero seguro que contiene una cantidad gigantesca de caracteres (ver esta mesa).

No puede guardar texto en su disco duro como «Unicode». Unicode es una representación abstracta del texto. Necesita «codificar» esta representación abstracta. Ahí es donde un codificacion entra en juego.

Codificaciones: UTF-8 vs UTF-16 vs UTF-32

Esta respuesta hace un buen trabajo al explicar los conceptos básicos:

  • UTF-8 y UTF-16 son codificaciones de longitud variable.
  • En UTF-8, un carácter puede ocupar un mínimo de 8 bits.
  • En UTF-16, la longitud de un carácter comienza con 16 bits.
  • UTF-32 es una codificación de longitud fija de 32 bits.

UTF-8 usa el conjunto ASCII para los primeros 128 caracteres. Eso es útil porque significa que el texto ASCII también es válido en UTF-8.

Mnemotécnica:

  • UTF-8: mínimo 8 bits.
  • UTF-dieciséis: mínimo dieciséis bits.
  • UTF-32: mínimo y máximo 32 bits.

Nota:

¿Por qué 2 ^ 7?

Esto es obvio para algunos, pero por si acaso. Tenemos siete espacios disponibles llenos de 0 o 1 (Código binario). Cada uno puede tener dos combinaciones. Si tenemos siete lugares, tenemos 2 * 2 * 2 * 2 * 2 * 2 * 2 = 2 ^ 7 = 128 combinaciones. Piense en esto como un candado de combinación con siete ruedas, cada rueda tiene solo dos números.

Fuente: Wikipedia, esta gran publicación de blog y Mocki.co donde publiqué inicialmente este resumen.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

60 161286 1564642329

¿Cómo podemos inicializar una matriz booleana en Java?

Tipos de datos PHP – javatpoint