unicode - importancia - qué es el código ascii y 10 ejemplos
¿Cuál es la diferencia entre ASCII y Unicode? (7)
¿Puedo saber la diferencia exacta entre Unicode y ASCII?
ASCII tiene un total de 128 caracteres (256 en el conjunto extendido).
¿Hay alguna especificación de tamaño para los caracteres Unicode?
ASCII define 128 caracteres, que se asignan a los números 0–127. Unicode define (menos de) 2 21 caracteres, que, de manera similar, se asignan a los números 0–2 21 (aunque no todos los números están asignados actualmente, y algunos están reservados).
Unicode es un superconjunto de ASCII, y los números 0-128 tienen el mismo significado en ASCII que en Unicode. Por ejemplo, el número 65 significa "Capital latina ''A''".
Debido a que los caracteres Unicode generalmente no caben en un byte de 8 bits, hay muchas maneras de almacenar los caracteres Unicode en secuencias de bytes, como UTF-32 y UTF-8.
ASCII define 128 caracteres, ya que Unicode contiene un repertorio de más de 120,000 caracteres.
ASCII tiene 128 posiciones de código, asignadas a caracteres gráficos y caracteres de control (códigos de control).
Unicode tiene 1,114,112 posiciones de código. Alrededor de 100.000 de ellos se han asignado actualmente a caracteres, y muchos puntos de código se han hecho de forma permanente sin caracteres (es decir, no se han utilizado para codificar ningún carácter), y la mayoría de los puntos de código aún no están asignados.
Las únicas cosas que ASCII y Unicode tienen en común son: 1) Son códigos de caracteres. 2) Las 128 primeras posiciones de código de Unicode se han definido para que tengan los mismos significados que en ASCII, excepto que las posiciones de código de los caracteres de control ASCII se definen simplemente como caracteres de control que denotan, con nombres correspondientes a sus nombres ASCII, pero sus significados son no definido en Unicode.
Sin embargo, a veces, Unicode se caracteriza (incluso en el estándar Unicode) como "ASCII ancho". Este es un eslogan que trata principalmente de transmitir la idea de que Unicode debe ser un código de caracteres universal de la misma manera que lo fue ASCII (aunque el repertorio de caracteres de ASCII era irremediablemente insuficiente para el uso universal), en comparación con el uso de diferentes códigos en Diferentes sistemas y aplicaciones y para diferentes idiomas.
Unicode como tal define solo el "tamaño lógico" de los caracteres: cada carácter tiene un número de código en un rango específico. Estos números de código se pueden presentar utilizando diferentes codificaciones de transferencia, e internamente, en la memoria, los caracteres Unicode generalmente se representan utilizando una o dos cantidades de 16 bits por carácter, dependiendo del rango de caracteres, a veces utilizando una cantidad de 32 bits por carácter.
ASCII tiene 128 puntos de código, de 0 a 127. Puede caber en un solo byte de 8 bits, los valores de 128 a 255 tienden a usarse para otros caracteres. Con opciones incompatibles, causando el desastre de la página de códigos . El texto codificado en una página de códigos no puede ser leído correctamente por un programa que asume o adivina en otra página de códigos.
Unicode surgió para resolver este desastre. La versión 1 comenzó con 65536 puntos de código, comúnmente codificados en 16 bits. Posteriormente ampliado en la versión 2 a 1.1 millones de puntos de código. La versión actual es 6.3, utilizando 110,187 de los 1.1 millones de puntos de código disponibles. Eso ya no cabe en 16 bits.
La codificación en 16 bits era común cuando apareció v2, utilizada por los sistemas operativos Microsoft y Apple, por ejemplo. Y tiempos de ejecución de idiomas como Java. La especificación v2 ideó una manera de asignar esos 1.1 millones de puntos de código en 16 bits. Una codificación llamada UTF-16, una codificación de longitud variable donde un punto de código puede tomar 2 o 4 bytes. Los puntos de código v1 originales toman 2 bytes, los agregados toman 4.
Otra codificación de longitud variable que es muy común, utilizada en los sistemas operativos y herramientas * nix es UTF-8, un punto de código puede tomar entre 1 y 4 bytes, los códigos ASCII originales toman 1 byte y el resto toma más. La única codificación de longitud no variable es UTF-32, toma 4 bytes para un punto de código. No es de uso frecuente ya que es bastante derrochador. Hay otros, como UTF-1 y UTF-7, ampliamente ignorados.
Un problema con las codificaciones UTF-16/32 es que el orden de los bytes dependerá de la naturaleza de la máquina que creó la secuencia de texto. Entonces agregue a la mezcla UTF-16BE, UTF-16LE, UTF-32BE y UTF-32LE.
Tener estas diferentes opciones de codificación trae de nuevo el desastre de la página de códigos, junto con acalorados debates entre los programadores, cuya elección de UTF es "la mejor". Su asociación con los valores predeterminados del sistema operativo casi dibuja las líneas. Una contramedida es la definición de una lista de materiales, la marca de orden de bytes, un punto de código especial (U + FEFF, espacio de ancho cero) al comienzo de una secuencia de texto que indica cómo se codifica el resto de la secuencia. Indica tanto la codificación UTF como la endianess y es neutral a un motor de procesamiento de texto. Desafortunadamente, es opcional y muchos programadores reclaman su derecho a omitirlo, por lo que los accidentes aún son bastante comunes.
ASCII y Unicode son codificaciones de dos caracteres. Básicamente, son estándares sobre cómo representar caracteres de diferencia en binario para que puedan escribirse, almacenarse, transmitirse y leerse en medios digitales. La principal diferencia entre los dos está en la forma en que codifican el carácter y la cantidad de bits que utilizan para cada uno. ASCII originalmente utilizó siete bits para codificar cada carácter. Más tarde, esto se incrementó a ocho con ASCII extendido para abordar la aparente insuficiencia del original. En contraste, Unicode utiliza un programa de codificación de bits variable donde puede elegir entre las codificaciones de 32, 16 y 8 bits. Usar más bits le permite usar más caracteres a expensas de archivos más grandes, mientras que menos bits le dan una opción limitada, pero ahorra mucho espacio. Utilizar menos bits (es decir, UTF-8 o ASCII) probablemente sería mejor si está codificando un documento grande en inglés.
Una de las razones principales por las que Unicode fue el problema surgió de los muchos programas ASCII extendidos no estándar. A menos que esté utilizando la página predominante, que es utilizada por Microsoft y la mayoría de las otras compañías de software, es probable que encuentre problemas con los caracteres que aparecen como cuadros. Unicode elimina virtualmente este problema ya que todos los puntos del código de caracteres se estandarizaron.
Otra gran ventaja de Unicode es que en su máximo puede alojar una gran cantidad de caracteres. Debido a esto, Unicode actualmente contiene la mayoría de los idiomas escritos y aún tiene espacio para aún más. Esto incluye scripts típicos de izquierda a derecha como el inglés e incluso scripts de derecha a izquierda como el árabe. Chino, japonés y muchas otras variantes también están representadas dentro de Unicode. Así que Unicode no será reemplazado en el corto plazo.
Para mantener la compatibilidad con el ASCII más antiguo, que ya estaba en uso generalizado en ese momento, Unicode fue diseñado de tal manera que los primeros ocho bits coincidían con los de la página ASCII más popular. Por lo tanto, si abre un archivo codificado en ASCII con Unicode, aún obtendrá los caracteres correctos codificados en el archivo. Esto facilitó la adopción de Unicode, ya que disminuyó el impacto de adoptar un nuevo estándar de codificación para aquellos que ya estaban usando ASCII.
Resumen:
1.ASCII uses an 8-bit encoding while Unicode uses a variable bit encoding.
2.Unicode is standardized while ASCII isn’t.
3.Unicode represents most written languages in the world while ASCII does not.
4.ASCII has its equivalent within Unicode.
Entender por qué se crearon ASCII y Unicode en primer lugar me ayudó a entender cómo funcionan realmente.
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 128 caracteres máximo.
Espera, ¿7 bits? Pero ¿por qué no 1 byte (8 bits)?
El último bit (8º) 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,? Y! Etc. Los otros son caracteres de control como el retorno de carro, avance de línea , tabulador, 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)
Vea la tabla completa de ASCII aquí .
ASCII estaba destinado sólo para inglés.
¿Qué? ¿Por qué sólo el inglés? ¡Cuántos idiomas ahí fuera!
Porque el centro de la industria informática estaba en los Estados Unidos en ese momento. Como consecuencia, no tenían que apoyar acentos u otras marcas como á, ü, ç, ñ, etc. (también conocido como diacritics ).
ASCII Extended
Algunas personas inteligentes comenzaron a usar el 8vo bit (el bit usado para la paridad) para codificar más caracteres para admitir su idioma (para admitir "é", en francés, por ejemplo). El solo uso de un bit adicional duplicó el tamaño de la tabla ASCII original para asignar 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 para este "ASCII extendido a 8 bits y no 7 bits como antes" podría simplemente ser referido como "ASCII extendido" o "ASCII de 8 bits".
Como @Tom señaló en su comentario a continuación, no existe tal cosa como " ASCII extendido ", pero 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 llamada ISO Latin-1 .
Unicode, el ascenso
ASCII Extended resuelve el problema para los idiomas que se basan en el alfabeto latino ... ¿qué pasa con los otros que necesitan un alfabeto completamente diferente? ¿Griego? ¿Ruso? Chinos y los gustos?
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 sí contiene una cantidad gigantesca de caracteres ( consulte esta tabla ).
No puede guardar texto en su disco duro como "Unicode". Unicode es una representación abstracta del texto. Necesitas "codificar" esta representación abstracta. Ahí es donde entra en juego una encoding .
Codificaciones: UTF-8 vs UTF-16 vs UTF-32
Esta respuesta hace un buen trabajo explicando 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- 16 : mínimo 16 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 con 0 o 1 ( código binario ). Cada uno puede tener dos combinaciones. Si tenemos siete puntos, tenemos 2 * 2 * 2 * 2 * 2 * 2 * 2 = 2 ^ 7 = 128 combinaciones. Piense en esto como una cerradura de combinación con siete ruedas, cada una de las cuales tiene solo dos números.
Fuente: Wikipedia y esta gran entrada de blog .