Mejor respuesta
Las otras respuestas no son del todo correctas.
Unicode , es cierto, contiene una lista de caracteres de casi todos los guiones del mundo. Sin embargo, esta es solo una parte del estándar Unicode: el Juego de caracteres codificados universal . El estándar Unicode también incluye reglas para renderizar, ordenar, normalizar y, sí, codificar estos caracteres Unicode.
UTF-8 es uno de las tres codificaciones de caracteres estándar utilizadas para representar Unicode como texto de computadora (las otras son UTF-16 y UTF-32). Históricamente, los archivos de texto se codificaban típicamente como secuencias de bytes donde cada byte representaba un carácter. Sin embargo, dado que un byte solo puede tomar uno de 256 valores, esto no es posible para Unicode. La codificación Unicode más simple es UTF-32 , que usa 4 bytes (o 32 bits) por carácter. Sin embargo, esto es ineficiente en su uso de almacenamiento, memoria y procesamiento. Hasta 1996 se pensaba (o se esperaba) que 2 bytes serían suficientes para representar cada carácter Unicode, pero luego la gente se dio cuenta de cuántos caracteres chinos hay. Como resultado, algunos lenguajes como JavaScript todavía usan 2 bytes ( UCS-2 ) para representar caracteres, lo que puede causar problemas al manejar caracteres como \ unicode {x1F60E }. Para solucionar este problema, UCS-2 se reemplazó por UTF-16 , donde algunos caracteres estaban representados por dos unidades de código de dos bytes en lugar de uno. Esto hace que la manipulación de cadenas sea más compleja (por ejemplo, calcular la longitud de una cadena) pero utiliza menos espacio que UTF-32.
UTF-8 es similar a UTF-16, excepto que sus unidades de código son todas de un byte (8 bits) de longitud, con caracteres representados por entre una y cuatro unidades de código. Los caracteres de texto sin formato (es decir, ASCII) están todos representados por un solo byte, de una manera idéntica a las cadenas normales que no son Unicode. Esto tiene la gran ventaja de que el texto ASCII heredado también es UTF-8 válido. Además, los bytes que representan ASCII no se utilizan en la representación de ningún otro carácter, por lo que los programas heredados que buscan esos caracteres no tienen que actualizarse. Estas ventajas, combinadas con el hecho de que UTF-8 es normalmente la forma más eficiente en términos de espacio almacenar texto Unicode (especialmente para textos occidentales) significa que la gran mayoría de las páginas web en estos días están codificadas en UTF-8.
Respuesta
El programa de procesamiento de texto tiene que generar algo (y guardar algo en un archivo). Si desea que los programas interoperen, su programa de procesamiento de texto para hablar con los controladores de su impresora y escáner, por ejemplo, debe describir cómo se comunican. Y le gustaría hacerlo de manera eficiente. un estándar habilita esa intercomunicación. De lo contrario, sus comillas tipográficas de Microsoft Word no funcionan con su impresora Canon y escáner HP. No es lo que desea….
Editar agregado: Vea la respuesta de Comet sobre cómo unicode está relacionado con la semántica (no la sintaxis /representación). Esto va a mi punto sobre la interoperabilidad. Quieres que tu secuencia de caracteres sea «significativa». Es por eso que algunas cosas se representan en unicode y otras no. Los usuarios del alfabeto latino, los usuarios del alfabeto cirílico, los usuarios del alfabeto griego y los usuarios del alfabeto turco tienen una letra que se parece a la «a» (aunque en algunas fuentes se distinguen y en otras no), pero los escritores de esos idiomas las consideran diferentes caracteres (tienen una diferencia semántica). Por lo tanto, unicode los considera diferentes puntos de código. Representan semánticas diferentes, se clasifican de manera diferente, etc. Lo mismo ocurre con las comillas de izquierda y derecha, y con ciertos caracteres de acento. En algunos idiomas, marcan una diferencia semántica. Obtienes cierto tipo de interoperabilidad cuando representas la semántica correctamente.
Obtienes un tipo diferente cuando representas las cosas gráficamente correctamente. Sin embargo, Unicode se esfuerza por conseguir el primero, no el segundo.
Si unicode representase homoglyphs como caracteres individuales, entonces tendrían el problema de qué tipo de letra se estaba utilizando y destruiría la corrección semántica. Una letra latina a en letra negra es muy diferente de una helvética de una romana, etc. Y la inclinación y la cursiva no siempre son iguales, pero a veces lo son.
Cuando leo letreros en Bulgaria, la mayoría A veces usan una fuente muy diferente para sus caracteres cirílicos que su transcripción latina, por lo que es obvio que son caracteres diferentes, incluso para cosas como la letra “a”. Pero a veces no lo hacen y cuando veo Bm en una matrícula, tengo que distinguir si transcribe a Vt en inglés o es simplemente el latín Bm y hay palabras completas como esa que tengo que leer para saber qué juego de caracteres están usando.
E incluso conseguir la corrección semántica es difícil. La s sostenida alemana existe solo en minúsculas y si imprime la palabra en «mayúsculas», usa dos caracteres S, pero hay palabras en minúscula que usan dos caracteres en «minúscula» y otras que usan sostenido- s.
Por lo tanto, como casi todos los estándares, Unicode es un compromiso. Intenta obtener las respuestas correctas para que las palabras se representen correctamente y se puedan transmitir con él. No intenta ser «gráficamente» correcto, por lo que una secuencia Unicode describe su representación impresa sin ambigüedades con todos los detalles prescritos. Necesita más que unicode para hacer eso.
Y, una vez que sigue esa ruta, tiene el problema con los dispositivos que no pueden generar (o ingresar) la descripción que desea especificar. Una impresora de 200 ppp sólo puede hacer mucho y hay sutilezas que una impresora de 1200 ppp puede expresar que simplemente se pierden a 200 ppp. La pregunta es si te importa. A veces lo hace, pero otras veces no.
Unicode es bueno para muchos casos en los que no lo hace y simplemente desea la semántica correcta. Cuando desee transmitir una palabra sin ambigüedades y al saber qué puntos de código Unicode se utilizan, sepa cómo se escribe la palabra en un lenguaje natural. La existencia de homoglyphs permite ser ambiguo, pero no lo requiere. Puede ser inequívoco en Unicode. Simplemente no puede representar todos los detalles de cómo podría imprimirse.