

El Consorcio Unicode y el ISO/IEC JTC 1/SC 2 / WG 2 colaboran conjuntamente en la lista de caracteres del Conjunto Universal de Caracteres Codificados . El Conjunto Universal de Caracteres Codificados, más comúnmente llamado Conjunto Universal de Caracteres ( abr. UCS, designación oficial: ISO / IEC 10646), es un estándar internacional para mapear caracteres , símbolos discretos utilizados en lenguaje natural , matemáticas , música y otros dominios, a valores de datos únicos legibles por máquina . Al crear esta asignación, el UCS permite a los proveedores de software informático interoperar y transmitir (intercambiar) cadenas de texto codificadas con UCS de uno a otro. Debido a que es un mapa universal , se puede utilizar para representar varios idiomas al mismo tiempo. Esto evita la confusión de usar múltiples codificaciones de caracteres heredadas , lo que puede dar como resultado que la misma secuencia de códigos tenga múltiples interpretaciones según la codificación de caracteres en uso, lo que resulta en mojibake si se elige la incorrecta.
El UCS tiene una capacidad potencial de más de 1 millón de caracteres. Cada carácter del UCS se representa de forma abstracta mediante un punto de código , un número entero entre 0 y 1.114.111 (1.114.112 = 2 20 + 2 16 o 17 × 2 16 = 0 x 110.000 puntos de código ), que se utiliza para representar cada carácter dentro de la lógica interna del software de procesamiento de texto . A partir de Unicode 16.0, publicado en septiembre de 2024, 299.056 (27 %) de estos puntos de código están asignados, 155.063 (14 %) tienen asignados caracteres, 137.468 (12 %) están reservados para uso privado, 2.048 se utilizan para habilitar el mecanismo de sustitutos y 66 se designan como no caracteres, dejando los 815.056 restantes (73 %) sin asignar. El número de caracteres codificados se compone de la siguiente manera:
- 149.641 caracteres gráficos (algunos de los cuales no tienen un glifo visible , pero aún así se consideran gráficos)
- 237 caracteres de propósito especial para control y formato .
La norma ISO mantiene la asignación básica de caracteres desde el nombre del carácter hasta el punto de código. A menudo, los términos carácter y punto de código se utilizan indistintamente. Sin embargo, cuando se hace una distinción, un punto de código se refiere al número entero del carácter: lo que uno podría pensar como su dirección. Mientras tanto, un carácter en ISO/IEC 10646 incluye la combinación del punto de código y su nombre, Unicode agrega muchas otras propiedades útiles al conjunto de caracteres, como bloque , categoría, script y direccionalidad .
Además del UCS, el estándar complementario Unicode (no es un proyecto conjunto con ISO, sino una publicación del Consorcio Unicode) proporciona otros detalles de implementación como:
- asignaciones entre UCS y otros conjuntos de caracteres
- Diferentes intercalaciones de caracteres y cadenas de caracteres para diferentes idiomas
- un algoritmo para diseñar texto bidireccional ("el algoritmo BiDi "), donde el texto en la misma línea puede cambiar de izquierda a derecha ("LTR") y de derecha a izquierda ("RTL")
- Un algoritmo de plegado de mayúsculas y minúsculas
Los usuarios finales del software informático ingresan estos caracteres en los programas a través de varios métodos de entrada , por ejemplo, teclados físicos o paletas de caracteres virtuales .
El UCS se puede dividir de varias maneras, como por plano , bloque, categoría de carácter o propiedad de carácter . [1]
Descripción general de la referencia de personajes
Una referencia de carácter numérico HTML o XML hace referencia a un carácter por su punto de código Unicode/ conjunto de caracteres universales y utiliza el formato
&#nnnn;
o
&#xhhh;
donde nnnn es el punto de código en formato decimal y hhhh es el punto de código en formato hexadecimal . La x debe estar en minúscula en los documentos XML. nnnn o hhhh pueden ser cualquier número de dígitos y pueden incluir ceros a la izquierda. hhhh puede mezclar mayúsculas y minúsculas, aunque las mayúsculas son el estilo habitual.
Por el contrario, una referencia de entidad de carácter hace referencia a un carácter por el nombre de una entidad que tiene el carácter deseado como texto de reemplazo . La entidad debe estar predefinida (integrada en el lenguaje de marcado) o declarada explícitamente en una definición de tipo de documento (DTD). El formato es el mismo que para cualquier referencia de entidad:
&nombre;
donde nombre es el nombre de la entidad, que distingue entre mayúsculas y minúsculas. El punto y coma es obligatorio.
Aviones
Unicode e ISO dividen el conjunto de puntos de código en 17 planos, cada uno de los cuales puede contener 65536 caracteres distintos o 1.114.112 en total. A partir de 2024 (Unicode 16.0), ISO y el Consorcio Unicode solo han asignado caracteres y bloques en siete de los 17 planos. Los demás permanecen vacíos y reservados para uso futuro.
Actualmente, la mayoría de los caracteres se asignan al primer plano: el plano multilingüe básico . Esto sirve para facilitar la transición para el software heredado, ya que el plano multilingüe básico se puede abordar con solo dos octetos . Los caracteres que se encuentran fuera del primer plano suelen tener un uso muy especializado o poco frecuente.
Cada plano corresponde al valor de uno o dos dígitos hexadecimales (0—9, A—F) que preceden a los cuatro últimos: por lo tanto, U+24321 está en el plano 2, U+4321 está en el plano 0 (implícitamente se lee U+04321) y U+10A200 estaría en el plano 16 (hex 10 = decimal 16). Dentro de un plano, el rango de puntos de código es hexadecimal 0000—FFFF, lo que da un máximo de 65536 puntos de código. Los planos restringen los puntos de código a un subconjunto de ese rango.
Bloques
Unicode agrega una propiedad de bloque a UCS que divide cada plano en bloques separados. Cada bloque es una agrupación de caracteres según su uso, como "operadores matemáticos" o "caracteres de escritura hebrea". Al asignar caracteres a puntos de código que no habían sido asignados previamente, el Consorcio normalmente asigna bloques enteros de caracteres similares: por ejemplo, todos los caracteres que pertenecen a la misma escritura o todos los símbolos con propósitos similares se asignan a un solo bloque. Los bloques también pueden mantener puntos de código no asignados o reservados cuando el Consorcio espera que un bloque requiera asignaciones adicionales.
Los primeros 256 puntos de código del UCS corresponden a los de ISO 8859-1 , la codificación de caracteres de 8 bits más popular en el mundo occidental . Como resultado, los primeros 128 caracteres también son idénticos a ASCII . Aunque Unicode se refiere a ellos como un bloque de escritura latina, estos dos bloques contienen muchos caracteres que son comúnmente útiles fuera de la escritura latina. En general, no todos los caracteres de un bloque determinado tienen que ser de la misma escritura, y una escritura determinada puede aparecer en varios bloques diferentes.
Categorías
Unicode asigna a cada carácter UCS una categoría general y una subcategoría. Las categorías generales son: letra, signo, número, puntuación, símbolo o control (en otras palabras, un carácter de formato o no gráfico).
Los tipos incluyen:
- Escrituras modernas, históricas y antiguas . A partir de 2024 (Unicode 16.0), el UCS identifica 168 escrituras que se utilizan o se han utilizado en todo el mundo. Muchas más se encuentran en diversas etapas de aprobación para su futura inclusión en el UCS. [2]
- Alfabeto Fonético Internacional . El UCS dedica varios bloques (más de 300 caracteres) a los caracteres del Alfabeto Fonético Internacional .
- Combinación de signos diacríticos . Un avance importante concebido por Unicode en el diseño del UCS y los algoritmos relacionados para el manejo de texto fue la introducción de la combinación de signos diacríticos. Al proporcionar acentos que se pueden combinar con cualquier carácter de letra, Unicode y el UCS reducen significativamente la cantidad de caracteres necesarios. Si bien el UCS también incluye caracteres precompuestos, estos se incluyeron principalmente para facilitar la compatibilidad dentro del UCS con sistemas de procesamiento de texto que no sean Unicode.
- Puntuación . Además de unificar los signos diacríticos, el UCS también buscó unificar la puntuación en todos los sistemas de escritura. Sin embargo, muchos sistemas de escritura también contienen puntuación, aunque esta no tenga una semántica similar en otros sistemas de escritura.
- Símbolos . En el UCS se incluyen muchos símbolos matemáticos, técnicos, geométricos y de otro tipo. Esto proporciona símbolos distintos con su propio punto de código o carácter en lugar de depender de fuentes alternas para proporcionar glifos simbólicos.
- Divisa .
- Similares a letras . Estos símbolos parecen combinaciones de muchas letras comunes de los alfabetos latinos, como ℅ . Unicode designa muchos de los símbolos similares a letras como caracteres de compatibilidad, generalmente porque pueden estar en texto simple al sustituir glifos por una secuencia de caracteres que la compone: por ejemplo, sustituyendo el glifo ℅ por la secuencia de caracteres compuesta c/o .
- Formas numéricas . Las formas numéricas consisten principalmente en fracciones precompuestas y números romanos. Al igual que otras áreas de composición de secuencias de caracteres, el enfoque Unicode prefiere la flexibilidad de componer fracciones mediante la combinación de caracteres. En este caso, para crear fracciones, se combinan números con el carácter de barra de fracción (U+2044). Como ejemplo de la flexibilidad que proporciona este enfoque, hay diecinueve caracteres de fracción precompuestos incluidos dentro del UCS. Sin embargo, hay una infinidad de fracciones posibles. Al usar caracteres de composición, la infinidad de fracciones se maneja con 11 caracteres (0-9 y la barra de fracción). Ningún conjunto de caracteres podría incluir puntos de código para cada fracción precompuesta. Idealmente, un sistema de texto debería presentar los mismos glifos para una fracción, ya sea una de las fracciones precompuestas (como ⅓ ) o una secuencia de caracteres de composición (como 1⁄3 ). Sin embargo, los navegadores web no suelen ser tan sofisticados con Unicode y el manejo de texto. Al hacerlo así se garantiza que las fracciones precompuestas y las fracciones de secuencia combinadas parezcan compatibles entre sí.
- Flechas .
- Matemático .
- Formas geométricas .
- Computación heredada .
- Imágenes de control Representaciones gráficas de muchos caracteres de control.
- Dibujo de caja .
- Elementos de bloque .
- Patrones Braille .
- Reconocimiento óptico de caracteres .
- Técnico .
- Simbolos .
- Símbolos varios .
- Emoticonos .
- Símbolos y pictogramas .
- Símbolos alquímicos .
- Piezas de juego (ajedrez, damas, go, dados, dominó, mahjong, naipes y muchos otros).
- Símbolos del ajedrez
- Templo Tai Xuan Jing .
- Símbolos del hexagrama Yijing .
- CJK . Dedicado a ideogramas y otros caracteres para apoyar los idiomas de China, Japón, Corea (CJK), Taiwán, Vietnam y Tailandia.
- Radicales y Trazos .
- Ideogramas . La mayor parte del UCS está dedicada a los ideogramas utilizados en los idiomas del este de Asia. Si bien la representación de estos ideogramas en glifos ha variado en los idiomas que los utilizan, el UCS unifica estos caracteres han en lo que Unicode denomina Unihan (por Han unificado). Con Unihan, el software de diseño de texto debe trabajar junto con las fuentes disponibles y estos caracteres Unicode para producir el glifo apropiado para el idioma correspondiente. A pesar de unificar estos caracteres, el UCS aún incluye más de 97.000 ideogramas Unihan.
- Notación musical .
- Taquigrafía Duployan .
- Escritura de letreros de Sutton .
- Caracteres de compatibilidad . Varios bloques del UCS están dedicados casi por completo a los caracteres de compatibilidad. Los caracteres de compatibilidad son aquellos incluidos para dar soporte a los sistemas de manejo de texto heredados que no distinguen entre caracteres y glifos como lo hace Unicode. Por ejemplo, muchas letras árabes se representan con un glifo diferente cuando la letra aparece al final de una palabra que cuando aparece al principio de una palabra. El enfoque de Unicode prefiere que estas letras se asignen al mismo carácter para facilitar el procesamiento y almacenamiento de texto interno de la máquina. Para complementar este enfoque, el software de texto debe seleccionar diferentes variantes de glifos para mostrar el carácter en función de su contexto. Se incluyen más de 4000 caracteres por motivos de compatibilidad.
- Caracteres de control .
- Sustitutos . El UCS incluye 2048 puntos de código en el Plano Multilingüe Básico (BMP) para pares de puntos de código sustitutos. Juntos, estos sustitutos permiten que cualquier punto de código en los otros dieciséis planos se pueda abordar mediante el uso de dos puntos de código sustitutos. Esto proporciona un método integrado simple para codificar el UCS de 20,1 bits dentro de una codificación de 16 bits como UTF-16. De esta manera, UTF-16 puede representar cualquier carácter dentro del BMP con una sola palabra de 16 bits. Los caracteres fuera del BMP se codifican luego utilizando dos palabras de 16 bits (4 octetos o bytes en total) utilizando los pares sustitutos.
- Uso privado . El consorcio ofrece varios bloques y planos de uso privado a los que se les pueden asignar caracteres dentro de varias comunidades, así como de proveedores de sistemas operativos y fuentes.
- No caracteres . El consorcio garantiza que a ciertos puntos de código nunca se les asignará un carácter y los llama puntos de código no caracteres. Estos incluyen el rango U+FDD0..U+FDEF y los dos últimos puntos de código de cada plano (que terminan en los dígitos hexadecimales FFFE y FFFF). [3]
Personajes de propósito especial
Unicode codifica más de cien mil caracteres. La mayoría de ellos representan grafemas para su procesamiento como texto lineal. Sin embargo, algunos no representan grafemas o, como grafemas, requieren un tratamiento excepcional. [4] [5] A diferencia de los caracteres de control ASCII y otros caracteres incluidos para las capacidades de ida y vuelta heredadas, estos otros caracteres de propósito especial dotan al texto simple de una semántica importante.
Algunos caracteres especiales pueden alterar el diseño del texto, como el de unión de ancho cero y el de no unión de ancho cero, mientras que otros no afectan en absoluto al diseño del texto, sino que afectan la forma en que se intercalan, se combinan o se procesan las cadenas de texto. Otros caracteres especiales, como los invisibles matemáticos, generalmente no tienen efecto en la representación del texto, aunque un software de diseño de texto sofisticado puede optar por ajustar sutilmente el espaciado a su alrededor.
Unicode no especifica la división del trabajo entre el software de diseño de fuentes y el software de diseño de texto (o "motor") al representar texto Unicode. Debido a que los formatos de fuentes más complejos, como OpenType o Apple Advanced Typography , permiten la sustitución contextual y el posicionamiento de los glifos, un motor de diseño de texto simple podría depender completamente de la fuente para todas las decisiones de elección y ubicación de los glifos. En la misma situación, un motor más complejo puede combinar información de la fuente con sus propias reglas para lograr su propia idea de mejor representación. Para implementar todas las recomendaciones de la especificación Unicode, un motor de texto debe estar preparado para trabajar con fuentes de cualquier nivel de sofisticación, ya que la sustitución contextual y las reglas de posicionamiento no existen en algunos formatos de fuentes y son opcionales en el resto. La barra de fracción es un ejemplo: las fuentes complejas pueden o no proporcionar reglas de posicionamiento en presencia del carácter de barra de fracción para crear una fracción, mientras que las fuentes en formatos simples no pueden.
Marca de orden de bytes
Cuando aparece al principio de un archivo o flujo de texto, la marca de orden de bytes (BOM) U+FEFF indica la forma de codificación y su orden de bytes.
Si el primer byte del flujo es 0xFE y el segundo 0xFF, entonces no es probable que el texto del flujo esté codificado en UTF-8 , ya que esos bytes no son válidos en UTF-8. Tampoco es probable que sea UTF-16 en orden de bytes little-endian porque 0xFE, 0xFF leídos como una palabra little-endian de 16 bits sería U+FFFE, lo cual no tiene sentido. La secuencia tampoco tiene significado en ninguna disposición de codificación UTF-32 , por lo que, en resumen, sirve como una indicación bastante confiable de que el flujo de texto está codificado como UTF-16 en orden de bytes big-endian . Por el contrario, si los dos primeros bytes son 0xFF, 0xFE, entonces se puede suponer que el flujo de texto está codificado como UTF-16LE porque, leídos como un valor little-endian de 16 bits, los bytes producen la marca de orden de bytes esperada 0xFEFF. Sin embargo, esta suposición se vuelve cuestionable si los dos bytes siguientes son ambos 0x00; o bien el texto comienza con un carácter nulo (U+0000), o bien la codificación correcta es en realidad UTF-32LE, en la que la secuencia completa de 4 bytes FF FE 00 00 es un carácter, el BOM.
La secuencia UTF-8 correspondiente a U+FEFF es 0xEF, 0xBB, 0xBF. Esta secuencia no tiene significado en otras formas de codificación Unicode, por lo que puede servir para indicar que esa secuencia está codificada como UTF-8.
La especificación Unicode no exige el uso de marcas de orden de bytes en secuencias de texto. Además, establece que no deben utilizarse en situaciones en las que ya se esté utilizando algún otro método para señalar la forma de codificación.
Invisibles matemáticos
Principalmente para matemáticas, el Separador Invisible (U+2063) proporciona un separador entre caracteres donde se puede omitir la puntuación o el espacio, como en un índice bidimensional como ij. Los Tiempos Invisibles (U+2062) y la Aplicación de Función (U+2061) son útiles en textos de matemáticas donde la multiplicación de términos o la aplicación de una función está implícita sin ningún glifo que indique la operación. Unicode 5.1 también introduce el carácter Invisible Plus Matemático (U+2064) que puede indicar que un número entero seguido de una fracción debe denotar su suma, pero no su producto.
Barra de fracción


El carácter de barra de fracción (U+2044) tiene un comportamiento especial en el estándar Unicode: [6] (sección 6.2, Otros signos de puntuación)
La forma estándar de una fracción construida usando la barra de fracción se define de la siguiente manera: cualquier secuencia de uno o más dígitos decimales (Categoría General = Nd), seguida de la barra de fracción, seguida de cualquier secuencia de uno o más dígitos decimales. Dicha fracción debe mostrarse como una unidad, como ¾ . Si el software de visualización no puede asignar la fracción a una unidad, entonces también se puede mostrar como una secuencia lineal simple como respaldo (por ejemplo, 3/4). Si la fracción se va a separar de un número anterior, se puede usar un espacio, eligiendo el ancho apropiado (normal, delgado, ancho cero, etc.). Por ejemplo, 1 + ESPACIO DE ANCHO CERO + 3 + BARRA DE FRACCIÓN + 4 se muestra como 1¾ .
Al seguir esta recomendación de Unicode, los sistemas de procesamiento de texto producen símbolos sofisticados a partir de texto simple. En este caso, la presencia del carácter de barra oblicua indica al motor de diseño que sintetice una fracción a partir de todos los dígitos consecutivos que preceden y siguen a la barra oblicua. En la práctica, los resultados varían debido a la compleja interacción entre las fuentes y los motores de diseño. Los motores de diseño de texto simple tienden a no sintetizar fracciones en absoluto y, en su lugar, dibujan los glifos como una secuencia lineal, como se describe en el esquema de respaldo de Unicode.
Los motores de diseño más sofisticados se enfrentan a dos opciones prácticas: pueden seguir la recomendación de Unicode o pueden confiar en las instrucciones de la propia fuente para sintetizar fracciones. Al ignorar las instrucciones de la fuente, el motor de diseño puede garantizar el comportamiento recomendado por Unicode. Al seguir las instrucciones de la fuente, el motor de diseño puede lograr una mejor tipografía porque la colocación y la forma de los dígitos se ajustarán a esa fuente en particular y a ese tamaño en particular.
El problema de seguir las instrucciones de la fuente es que los formatos de fuente más simples no tienen forma de especificar el comportamiento de síntesis de fracciones. Mientras tanto, los formatos más complejos no requieren que la fuente especifique el comportamiento de síntesis de fracciones y, por lo tanto, muchos no lo hacen. La mayoría de las fuentes de formatos complejos pueden indicar al motor de diseño que reemplace una secuencia de texto simple como 1⁄2 con el glifo precompuesto ½ . Pero debido a que muchos de ellos no emitirán instrucciones para sintetizar fracciones, una cadena de texto simple como 221⁄225 puede perfectamente mostrarse como 22½25 ( siendo ½ la fracción precompuesta sustituida, en lugar de la sintetizada). Ante problemas como este, aquellos que deseen confiar en el comportamiento recomendado de Unicode deben elegir fuentes que se sepa que sintetizan fracciones o software de diseño de texto que se sepa que produce el comportamiento recomendado de Unicode independientemente de la fuente.
Formato neutral bidireccional
La dirección de escritura es la dirección en la que se colocan los glifos en la página en relación con la progresión hacia adelante de los caracteres en la cadena Unicode. El inglés y otros idiomas con escritura latina tienen una dirección de escritura de izquierda a derecha. Varios de los principales sistemas de escritura, como el árabe y el hebreo , tienen una dirección de escritura de derecha a izquierda. La especificación Unicode asigna un tipo direccional a cada carácter para informar a los procesadores de texto cómo deben ordenarse las secuencias de caracteres en la página.
Si bien los caracteres léxicos (es decir, las letras) normalmente son específicos de un solo sistema de escritura, algunos símbolos y signos de puntuación se utilizan en muchos sistemas de escritura. Unicode podría haber creado símbolos duplicados en el repertorio que difieren solo por el tipo direccional, pero optó por unificarlos y asignarles un tipo direccional neutro. Adquieren la dirección en el momento de la representación a partir de caracteres adyacentes. Algunos de estos caracteres también tienen una propiedad de duplicación bidireccional que indica que el glifo debe representarse en imagen reflejada cuando se utiliza en texto de derecha a izquierda.
El tipo direccional de tiempo de representación de un carácter neutro puede permanecer ambiguo cuando la marca se coloca en el límite entre cambios de dirección. Para solucionar este problema, Unicode incluye caracteres que tienen una direccionalidad fuerte, no tienen ningún glifo asociado y son ignorados por sistemas que no procesan texto bidireccional:
- Marca de letra árabe (U+061C)
- Marca de izquierda a derecha (U+200E)
- Marca de derecha a izquierda (U+200F)
Si se rodea un carácter neutral bidireccional con la marca de izquierda a derecha, se obligará al carácter a comportarse como un carácter de izquierda a derecha, mientras que si se rodea con la marca de derecha a izquierda, se obligará a comportarse como un carácter de derecha a izquierda. El comportamiento de estos caracteres se detalla en el Algoritmo Bidireccional de Unicode.
Formato general bidireccional
Si bien Unicode está diseñado para manejar varios idiomas, varios sistemas de escritura e incluso texto que fluye de izquierda a derecha o de derecha a izquierda con una mínima intervención del autor, existen circunstancias especiales en las que la combinación de texto bidireccional puede volverse intrincada y requerir un mayor control del autor. Para estas circunstancias, Unicode incluye otros cinco caracteres para controlar la compleja incrustación de texto de izquierda a derecha dentro de texto de derecha a izquierda y viceversa:
- Incrustación de izquierda a derecha (U+202A)
- Incrustación de derecha a izquierda (U+202B)
- Formato direccional pop (U+202C)
- Anulación de izquierda a derecha (U+202D)
- Anulación de derecha a izquierda (U+202E)
- Aislamiento de izquierda a derecha (U+2066)
- Aislamiento de derecha a izquierda (U+2067)
- Primer aislado fuerte (U+2068)
- Aislamiento direccional pop (U+2069)
Caracteres de anotación interlineal
- Anclaje de anotación interlineal (U+FFF9)
- Separador de anotaciones interlineales (U+FFFA)
- Terminador de anotación interlineal (U+FFFB)
Específico del script
- Control de formato prefijado
- Signo de número árabe (U+0600)
- Señal árabe Sanah (U+0601)
- Marcador de pie de página en árabe (U+0602)
- Señal árabe Safha (U+0603)
- Señal árabe Samvat (U+0604)
- Número árabe marcado arriba (U+0605)
- Final árabe de Ayah (U+06DD)
- Abreviatura siríaca Mark (U+070F)
- Libra árabe marca arriba (U+0890)
- Piastra árabe en la parte superior (U+0891)
- Signo numérico de Kaithi (U+110BD)
- Signo de número Kaithi arriba (U+110CD)
- Jeroglíficos egipcios
- Ensamblador vertical de jeroglíficos egipcios (U+13430)
- Ensamblador horizontal de jeroglíficos egipcios (U+13431)
- Inserción de jeroglífico egipcio en la parte superior (U+13432)
- Inserción de jeroglífico egipcio en la parte inferior (U+13433)
- Inserción de jeroglífico egipcio en el extremo superior (U+13434)
- Inserción de jeroglífico egipcio en el extremo inferior (U+13435)
- Jeroglífico egipcio superpuesto en el centro (U+13436)
- Segmento inicial de jeroglífico egipcio (U+13437)
- Segmento final del jeroglífico egipcio (U+13438)
- Inserción de jeroglífico egipcio en el centro (U+13439)
- Inserción de jeroglífico egipcio en la parte superior (U+1343A)
- Inserción de jeroglífico egipcio en la parte inferior (U+1343B)
- Recinto con inicio de jeroglífico egipcio (U+1343C)
- Recinto final con jeroglíficos egipcios (U+1343D)
- Jeroglífico egipcio que indica el comienzo del recinto amurallado (U+1343E)
- Recinto amurallado con jeroglíficos egipcios (U+1343F)
- Brahmi
- Ensamblador de números Brahmi (U+1107F)
- Formación de caracteres muertos en la escritura derivada de Brahmi ( Virama y diacríticos similares)
- Devanagari firma Virama (U+094D)
- Signo bengalí Virama (U+09CD)
- Signo Gurmukhi Virama (U+0A4D)
- Signo Gujarati Virama (U+0ACD)
- Signo Oriya Virama (U+0B4D)
- Signo tamil Virama (U+0BCD)
- Signo telugu Virama (U+0C4D)
- Signo Virama de Kannada (U+0CCD)
- Signo malayalam barra vertical Virama (U+0D3B)
- Signo malayalam Virama circular (U+0D3C)
- Signo malayalam Virama (U+0D4D)
- El cingalés ficha a Al-Lakuna (U+0DCA)
- Carácter tailandés Phinthu (U+0E3A)
- Carácter tailandés Yamakkan (U+0E4E)
- Pali Virama del signo lao (U+0EBA)
- Signo de Myanmar Virama (U+1039)
- Signo tagalo Virama (U+1714)
- Signo tagalo Pamudpod (U+1715)
- Signo Hanunoo Pamudpod (U+1734)
- El fichaje del jemer Viriam (U+17D1)
- El Khmer firma con Coeng (U+17D2)
- Signo de Tai Tham Sakot (U+1A60)
- Tai Tham firma Ra Haam (U+1A7A)
- Adeg balinés Adeg (U+1B44)
- Signo sundanés Pamaaeh (U+1BAA)
- Signo sundanés Virama (U+1BAB)
- Batak Pangolat (U+1BF2)
- Batak Panongonan (U+1BF3)
- Syloti Nagri Sign Hasanta (U+A806)
- Syloti Nagri Sign Alternate Hasanta (U+A82C)
- Saurashtra Sign Virama (U+A8C4)
- Rejang Virama (U+A953)
- Javanese Pangkon (U+A9C0)
- Meetei Mayek Virama (U+AAF6)
- Kharoshthi Virama (U+10A3F)
- Brahmi Virama (U+11046)
- Brahmi Sign Old Tamil Virama (U+11070)
- Kaithi Sign Virama (U+110B9)
- Chakma Virama (U+11133)
- Sharada Sign Virama (U+111C0)
- Khojki Sign Virama (U+11235)
- Khudawadi Sign Virama (U+112EA)
- Grantha Sign Virama (U+1134D)
- Tulu-Tigalari Sign Virama (U+113CE)
- Tulu-Tigalari Sign Looped Virama (U+113CF)
- Tulu-Tigalari Conjoiner (U+113D0)
- Newa Sign Virama (U+11442)
- Tirhuta Sign Virama (U+114C2)
- Siddham Sign Virama (U+115BF)
- Modi Sign Virama (U+1163F)
- Takri Sign Virama (U+116B6)
- Ahom Sign Killer (U+1172B)
- Dogra Sign Virama (U+11839)
- Dives Akuru Sign Halanta (U+1193D)
- Dives Akuru Virama (U+1193E)
- Nandinagari Sign Virama (U+119E0)
- Zanabazar Square Sign Virama (U+11A34)
- Zanabazar Square Subjoiner (U+11A47)
- Soyombo Subjoiner (U+11A99)
- Bhaiksuki Sign Virama (U+11C3F)
- Masaram Gondi Sign Halanta (U+11D44)
- Masaram Gondi Virama (U+11D45)
- Gunjala Gondi Virama (U+11D97)
- Kawi Sign Killer (U+11F41)
- Kawi Conjoiner (U+11F42)
- Gurung Khema Sign Tholhoma (U+1612F)
- Kirat Rai Sign Virama (U+16D6B)
- Kirat Rai Sign Saat (U+16D6C)
- Historical Viramas with other functions
- Tibetan Mark Halanta (U+0F84)
- Myanmar Sign Asat (U+103A)
- Limbu Sign Sa-I (U+193B)
- Meetei Mayek Apun Iyek (U+ABED)
- Chakma Maayyaa (U+11134)
- Mongolian Variation Selectors
- Mongolian Free Variation Selector One (U+180B)
- Mongolian Free Variation Selector Two (U+180C)
- Mongolian Free Variation Selector Three (U+180D)
- Mongolian Vowel Separator (U+180E)
- Generic Variation Selectors
- Variation Selector-1 through -16 (U+FE00–U+FE0F)
- Variation Selector-17 through -256 (U+E0100–U+E01EF)
- Tag characters (U+E0001 and U+E0020–U+E007F)
- Tifinagh
- Tifinagh Consonant Joiner (U+2D7F)
- Ogham
- Ogham Space Mark (U+1680)
- Ideographic
- Ideographic variation indicator (U+303E)
- Ideographic Description (U+2FF0–U+2FFB)
- Musical Format Control
- Musical Symbol Begin Beam (U+1D173)
- Musical Symbol End Beam (U+1D174)
- Musical Symbol Begin Tie (U+1D175)
- Musical Symbol End Tie (U+1D176)
- Musical Symbol Begin Slur (U+1D177)
- Musical Symbol End Slur (U+1D178)
- Musical Symbol Begin Phrase (U+1D179)
- Musical Symbol End Phrase (U+1D17A)
- Shorthand Format Control
- Shorthand Format Letter Overlap (U+1BCA0)
- Shorthand Format Continuing Overlap (U+1BCA1)
- Shorthand Format Down Step (U+1BCA2)
- Shorthand Format Up Step (U+1BCA3)
- Deprecated Alternate Formatting
- Inhibit Symmetric Swapping (U+206A)
- Activate Symmetric Swapping (U+206B)
- Inhibit Arabic Form Shaping (U+206C)
- Activate Arabic Form Shaping (U+206D)
- National Digit Shapes (U+206E)
- Nominal Digit Shapes (U+206F)
Others
- Object Replacement Character (U+FFFC)
- Replacement Character (U+FFFD)
Characters vs code points
The term "character" is not well defined, and what we are referring to most of the time is the grapheme. A grapheme is represented visually by its glyph. The typeface (often erroneously referred to as font) used can depict visual variations of the same character. It is possible that two different graphemes can have the exact same glyph or are visually so close that the average reader cannot tell them apart.
A grapheme is almost always represented by one code point, for example the LATIN CAPITAL LETTER A is represented by only code point U+0041.
The grapheme LATIN CAPITAL A WITH DIAERESIS Ä is an example where a character can be represented by more than one code point. It can be U+00C4, or U+0041U+0308. U+0041 is the familiar A and U+0308 is the COMBINING DIAERESIS ̈, a combining diacritical mark.
When a combining mark is adjacent to a non-combining mark code point, text rendering applications should superimpose the combining mark onto the glyph represented by the other code point to form a grapheme according to a set of rules.[7]
The word BÄM would therefore be three graphemes. It may be made up of three code points or more depending on how the characters are actually composed.
Whitespace, joiners, and separators
Unicode provides a list of characters it deems whitespace characters for interoperability support. Software Implementations and other standards may use the term to denote a slightly different set of characters. For example, Java does not consider U+00A0 NO-BREAK SPACE or U+0085 <control-0085> (NEXT LINE) to be whitespace, even though Unicode does. Whitespace characters are characters typically designated for programming environments. Often they have no syntactic meaning in such programming environments and are ignored by the machine interpreters. Unicode designates the legacy control characters U+0009 through U+000D and U+0085 as whitespace characters, as well as all characters whose General Category property value is Separator. There are 25 total whitespace characters as of Unicode 16.0.
Grapheme joiners and non-joiners
The zero-width joiner (U+200D) and zero-width non-joiner (U+200C) control the joining and ligation of glyphs. The joiner does not cause characters that would not otherwise join or ligate to do so, but when paired with the non-joiner these characters can be used to control the joining and ligating properties of the surrounding two joining or ligating characters. The Combining Grapheme Joiner (U+034F) is used to distinguish two base characters as one common base or digraph, mostly for underlying text processing, collation of strings, case folding and so on.
Word joiners and separators
The most common word separator is a space (U+0020). However, there are other word joiners and separators that also indicate a break between words and participate in line-breaking algorithms. The No-Break Space (U+00A0) also produces a baseline advance without a glyph but inhibits rather than enabling a line-break. The Zero Width Space (U+200B) allows a line-break but provides no space: in a sense joining, rather than separating, two words. Finally, the Word Joiner (U+2060) inhibits line breaks and also involves none of the white space produced by a baseline advance.
Other separators
- Line Separator (U+2028)
- Paragraph Separator (U+2029)
These provide Unicode with native paragraph and line separators independent of the legacy encoded ASCII control characters such as carriage return (U+000A), linefeed (U+000D), and Next Line (U+0085). Unicode does not provide for other ASCII formatting control characters which presumably then are not part of the Unicode plain text processing model. These legacy formatting control characters include Tab (U+0009), Line Tabulation or Vertical Tab (U+000B), and Form Feed (U+000C) which is also thought of as a page break.
Spaces
The space character (U+0020) typically input by the space bar on a keyboard serves semantically as a word separator in many languages. For legacy reasons, the UCS also includes spaces of varying sizes that are compatibility equivalents for the space character. While these spaces of varying width are important in typography, the Unicode processing model calls for such visual effects to be handled by rich text, markup and other such protocols. They are included in the Unicode repertoire primarily to handle lossless roundtrip transcoding from other character set encodings. These spaces include:
- En Quad (U+2000)
- Em Quad (U+2001)
- En Space (U+2002)
- Em Space (U+2003)
- Three-Per-Em Space (U+2004)
- Four-Per-Em Space (U+2005)
- Six-Per-Em Space (U+2006)
- Figure Space (U+2007)
- Punctuation Space (U+2008)
- Thin Space (U+2009)
- Hair Space (U+200A)
- Medium Mathematical Space (U+205F)
Aside from the original ASCII space, the other spaces are all compatibility characters. In this context this means that they effectively add no semantic content to the text, but instead provide styling control. Within Unicode, this non-semantic styling control is often referred to as rich text and is outside the thrust of Unicode's goals. Rather than using different spaces in different contexts, this styling should instead be handled through intelligent text layout software.
Three other writing-system-specific word separators are:
- Mongolian Vowel Separator (U+180E)
- Ideographic Space (U+3000): behaves as an ideographic separator and generally rendered as white space of the same width as an ideograph.
- Ogham Space Mark (U+1680): this character is sometimes displayed with a glyph and other times as only white space.
Line-break control characters
Several characters are designed to help control line-breaks either by discouraging them (no-break characters) or suggesting line breaks such as the soft hyphen (U+00AD) (sometimes called the "shy hyphen"). Such characters, though designed for styling, are probably indispensable for the intricate types of line-breaking they make possible.
- Break inhibiting
- Non-breaking hyphen (U+2011)
- No-break space (U+00A0)
- Tibetan Mark Delimiter Tsheg Bstar (U+0F0C)
- Narrow no-break space (U+202F)
The break inhibiting characters are meant to be equivalent to a character sequence wrapped in the Word Joiner U+2060. However, the Word Joiner may be appended before or after any character that would allow a line-break to inhibit such line-breaking.
- Break enabling
- Soft hyphen (U+00AD)
- Tibetan Mark Intersyllabic Tsheg (U+0F0B)
- Zero-width space (U+200B)
Both the break inhibiting and break enabling characters participate with other punctuation and whitespace characters to enable text imaging systems to determine line breaks within the Unicode Line Breaking Algorithm.[8]
Types of code point
All code points given some kind of purpose or use are considered designated code points. Of those, they may be assigned to an abstract character, or otherwise designated for some other purpose.
Assigned characters
The majority of code points in actual use have been assigned to abstract characters. This includes private-use characters, which though not formally designated by the Unicode standard for a particular purpose, require a sender and recipient to have agreed in advance how they should be interpreted for meaningful information interchange to take place.
Private-use characters
The UCS includes 137,468 private-use characters, which are code points for private use spread across three different blocks, each called a Private Use Area (PUA). The Unicode standard recognizes code points within PUAs as legitimate Unicode character codes, but does not assign them any (abstract) character. Instead, individuals, organizations, software vendors, operating system vendors, font vendors and communities of end-users are free to use them as they see fit. Within closed systems, characters in the PUA can operate unambiguously, allowing such systems to represent characters or glyphs not defined in Unicode.[9] In public systems their use is more problematic, since there is no registry and no way to prevent several organizations from adopting the same code points for different purposes. One example of such a conflict is Apple's use of U+F8FF for the Apple logo, versus the ConScript Unicode Registry's use of U+F8FF as klingon mummification glyph in the Klingon script.[10]
The Basic Multilingual Plane (Plane 0) contains 6,400 private-user characters in the eponymously named PUA Private Use Area, which ranges from U+E000 to U+F8FF. The Private Use Planes, Plane 15 and Plane 16, each have their own PUAs of 65,534 private-use characters (with the final two code points of each plane being noncharacters). These are Supplementary Private Use Area-A, which ranges from U+F0000 to U+FFFFD, and Supplementary Private Use Area-B, which ranges from U+100000 to U+10FFFD.
PUAs are a concept inherited from certain Asian encoding systems. These systems had private use areas to encode what the Japanese call gaiji (rare characters not normally found in fonts) in application-specific ways.
Surrogates
The UCS uses surrogates to address characters outside the initial Basic Multilingual Plane without resorting to more-than-16-bit-word representations.[11] There are 1024 "high" surrogates (D800–DBFF) and 1024 "low" surrogates (DC00–DFFF). By combining a pair of surrogates, the remaining characters in all the other planes can be addressed (1024 × 1024 = 1048576 code points in the other 16 planes). In UTF-16, they must always appear in pairs, as a high surrogate followed by a low surrogate, thus using 32 bits to denote one code point.
A surrogate pair denotes the code point
- 1000016 + (H - D80016) × 40016 + (L - DC0016)
where H and L are the numeric values of the high and low surrogates respectively.[12]
Since high surrogate values in the range DB80–DBFF always produce values in the Private Use planes, the high surrogate range can be further divided into (normal) high surrogates (D800–DB7F) and "high private use surrogates" (DB80–DBFF).
Isolated surrogate code points have no general interpretation; consequently, no character code charts or names lists are provided for this range. In the Python programming language, individual surrogate codes are used to embed undecodable bytes in Unicode strings.[13]
Noncharacters
The unhyphenated term "noncharacter" refers to 66 code points (labeled <not a character>) permanently reserved for internal use, and therefore guaranteed to never be assigned to a character.[14] Each of the 17 planes has its two ending code points set aside as noncharacters. So, noncharacters are: U+FFFE and U+FFFF on the BMP, U+1FFFE and U+1FFFF on Plane 1, and so on, up to U+10FFFE and U+10FFFF on Plane 16, for a total of 34 code points. In addition, there is a contiguous range of another 32 noncharacter code points in the BMP: U+FDD0..U+FDEF. Software implementations are free to use these code points for internal use. One particularly useful example of a noncharacter is the code point U+FFFE. This code point has the reverse UTF-16/UCS-2 byte sequence of the byte order mark (U+FEFF). If a stream of text contains this noncharacter, this is a good indication the text has been interpreted with the incorrect endianness.
Versions of the Unicode standard from 3.1.0 to 6.3.0 claimed that noncharacters "should never be interchanged". Corrigendum #9 of the standard later stated that this was leading to "inappropriate over-rejection", clarifying that "[Noncharacters] are not illegal in interchange nor do they cause ill-formed Unicode text", and removing the original claim.
Reserved code points
All other code points, being those not designated, are referred to as being reserved. These code points may be assigned for a particular use in future versions of the Unicode standard.
Characters, grapheme clusters and glyphs
Whereas many other character sets assign a character for every possible glyph representation of the character, Unicode seeks to treat characters separately from glyphs. This distinction is not always unambiguous; however, a few examples will help illustrate the distinction. Often two characters may be combined typographically to improve the readability of the text. For example, the three letter sequence "ffi" may be treated as a single glyph. Other character sets would often assign a code point to this glyph in addition to the individual letters: "f" and "i".
In addition, Unicode approaches diacritic modified letters as separate characters that, when rendered, become a single glyph. For example, an "o" with diaeresis: "ö". Traditionally, other character sets assigned a unique character code point for each diacritic modified letter used in each language. Unicode seeks to create a more flexible approach by allowing combining diacritic characters to combine with any letter. This has the potential to significantly reduce the number of active code points needed for the character set. As an example, consider a language that uses the Latin script and combines the diaeresis with the upper- and lower-case letters "a", "o", and "u". With the Unicode approach, only the diaeresis diacritic character needs to be added to the character set to use with the Latin letters: "a", "A", "o", "O", "u", and "U": seven characters in all. A legacy character sets needs to add six precomposed letters with a diaeresis in addition to the six code points it uses for the letters without diaeresis: twelve character code points in total.
Compatibility characters
UCS includes thousands of characters that Unicode designates as compatibility characters. These are characters that were included in UCS in order to provide distinct code points for characters that other character sets differentiate, but would not be differentiated in the Unicode approach to characters.
The chief reason for this differentiation was that Unicode makes a distinction between characters and glyphs. For example, when writing English in a cursive style, the letter "i" may take different forms whether it appears at the beginning of a word, the end of a word, the middle of a word or in isolation. Languages such as Arabic written in an Arabic script are always cursive. Each letter has many different forms. UCS includes 730 Arabic form characters that decompose to just 88 unique Arabic characters. However, these additional Arabic characters are included so that text processing software may translate text from other character sets to UCS and back again without any loss of information crucial for non-Unicode software.
However, for UCS and Unicode in particular, the preferred approach is to always encode or map that letter to the same character no matter where it appears in a word. Then the distinct forms of each letter are determined by the font and text layout software methods. In this way, the internal memory for the characters remains identical regardless of where the character appears in a word. This greatly simplifies searching, sorting and other text processing operations.
Character properties
Every character in Unicode is defined by a large and growing set of properties. Most of these properties are not part of Universal Character Set. The properties facilitate text processing including collation or sorting of text, identifying words, sentences and graphemes, rendering or imaging text and so on. Below is a list of some of the core properties. There are many others documented in the Unicode Character Database.[15]
Unicode provides an online database[21] to interactively query the entire Unicode character repertoire by the various properties.
See also
References
- ^ "The Unicode Standard". The Unicode Consortium. Retrieved 2016-08-09.
- ^ "Roadmaps to Unicode". The Unicode Consortium. Retrieved 2024-09-12.
- ^ "FAQ - Private-Use Characters, Noncharacters, and Sentinels". www.unicode.org. Retrieved 2023-10-24.
- ^ "Section 2.13: Special Characters". The Unicode Standard. The Unicode Consortium. September 2024.
- ^ "Section 4.12: Characters with Unusual Properties". The Unicode Standard. The Unicode Consortium. September 2024.
- ^ "Section 6.2: General Punctuation". The Unicode Standard. The Unicode Consortium. September 2024.
- ^ "UTN #2: A General Method for Rendering Combining Marks". www.unicode.org. Retrieved 2020-12-16.
- ^ "UAX #14: Unicode Line Breaking Algorithm". The Unicode Consortium. 2016-06-01. Retrieved 2016-08-09.
- ^ "Section 23.5: Private-Use Characters" (PDF). The Unicode Standard. The Unicode Consortium. September 2022.
- ^ Michael Everson (2004-01-15). "Klingon: U+F8D0 - U+F8FF".
- ^ "Section 23.6: Surrogates Area" (PDF). The Unicode Standard. The Unicode Consortium. September 2022.
- ^ Kaplan, Michael. "Surrogate Support in Microsoft Products".
- ^ v. Löwis, Martin (2009-04-22). "Non-decodable Bytes in System Character Interfaces". Python Enhancement Proposals. PEP 383. Retrieved 2016-08-09.
- ^ "Section 23.7: Noncharacters" (PDF). The Unicode Standard. The Unicode Consortium. September 2022.
- ^ "Unicode Character Database". The Unicode Consortium. Retrieved 2016-08-09.
- ^ Freytag, Asmus; McGowan, Rick; Whistler, Ken. "Unicode Technical Note #27 — Known Anomalies in Unicode Character Names". Unicode Consortium.
- ^ Not the official Unicode representative glyph, but merely a representative glyph. To see the official Unicode representative glyph, see the code charts.
- ^ "Character Code Charts". The Unicode Consortium. Retrieved 2016-08-09.
- ^ "UAX #44: Unicode Character Database". General Category Values. The Unicode Consortium. 2014-06-05. Retrieved 2016-08-09.
- ^ Davis, Mark; Iancu, Laurențiu; Whistler, Ken. "Table 9. Property Table § PropList.txt". Unicode Standard Annex #44 — Unicode Character Database. Unicode Consortium.
- ^ "Unicode Utilities: Character Property Index". The Unicode Consortium. Retrieved 2015-06-09.
External links
- Unicode Consortium
- decodeunicode.org Unicode Wiki with all 98884 graphic characters of Unicode 5.0 as gifs, full text search
- Unicode Characters by Property