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:
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:
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]
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
&#x
hhh;
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.
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.
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 la 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.
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:
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 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 las reglas de sustitución contextual y 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.
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.
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.
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 generan 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.
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 esto, Unicode incluye caracteres que tienen una direccionalidad fuerte, no tienen ningún glifo asociado a ellos y son ignorados por sistemas que no procesan texto bidireccional:
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.
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:
El término "carácter" no está bien definido, y a lo que nos referimos la mayor parte del tiempo es al grafema . Un grafema se representa visualmente mediante su glifo . El tipo de letra (a menudo denominado erróneamente fuente ) utilizado puede representar variaciones visuales del mismo carácter. Es posible que dos grafemas diferentes puedan tener exactamente el mismo glifo o que sean visualmente tan parecidos que el lector medio no pueda distinguirlos.
Un grafema casi siempre está representado por un punto de código, por ejemplo, la LETRA MAYÚSCULA LATINA A está representada solo por el punto de código U+0041.
El grafema A MAYÚSCULA LATINA CON DIÉRESIS Ä es un ejemplo en el que un carácter puede representarse con más de un punto de código. Puede ser U+00C4 o U+0041U+0308. U+0041 es la conocida A y U+0308 es la DIÉRESIS COMBINADA ̈ , un signo diacrítico combinatorio .
Cuando una marca de combinación está adyacente a un punto de código de marca no combinable, las aplicaciones de representación de texto deben superponer la marca de combinación sobre el glifo representado por el otro punto de código para formar un grafema de acuerdo con un conjunto de reglas. [7]
La palabra BÄM estaría formada por tres grafemas. Puede estar formada por tres puntos de código o más, dependiendo de cómo estén compuestos los caracteres.
Unicode proporciona una lista de caracteres que considera espacios en blanco para compatibilidad con la interoperabilidad. Las implementaciones de software y otros estándares pueden usar el término para indicar un conjunto de caracteres ligeramente diferente. Por ejemplo, Java no considera U+00A0 NO-BREAK SPACE o U+0085 <control-0085> (SIGUIENTE LÍNEA) como espacio en blanco, aunque Unicode lo hace. Los caracteres de espacio en blanco son caracteres que normalmente se designan para entornos de programación. A menudo no tienen significado sintáctico en dichos entornos de programación y los intérpretes de máquina los ignoran. Unicode designa los caracteres de control heredados U+0009 a U+000D y U+0085 como caracteres de espacio en blanco, así como todos los caracteres cuyo valor de propiedad de Categoría general es Separador. Hay un total de 25 caracteres de espacio en blanco a partir de Unicode 16.0.
El conector de ancho cero (U+200D) y el conector no conector de ancho cero (U+200C) controlan la unión y ligadura de glifos. El conector no hace que los caracteres que de otra manera no se unirían o ligarían lo hagan, pero cuando se combinan con el conector no conector, estos caracteres se pueden usar para controlar las propiedades de unión y ligadura de los dos caracteres que se unen o ligan circundantes. El conector de grafema combinador (U+034F) se usa para distinguir dos caracteres base como una base o dígrafo común, principalmente para el procesamiento de texto subyacente, la intercalación de cadenas, el plegado de mayúsculas y minúsculas, etc.
El separador de palabras más común es el espacio (U+0020). Sin embargo, existen otros separadores y uniones de palabras que también indican una separación entre palabras y participan en algoritmos de salto de línea. El espacio sin salto de línea (U+00A0) también produce un avance de línea base sin un glifo, pero inhibe el salto de línea en lugar de habilitarlo. El espacio de ancho cero (U+200B) permite un salto de línea pero no proporciona espacio: en cierto sentido, une dos palabras en lugar de separarlas. Por último, el separador de palabras (U+2060) inhibe los saltos de línea y tampoco implica ninguno de los espacios en blanco producidos por un avance de línea base.
Estos proporcionan a Unicode separadores de párrafos y líneas nativos independientes de los caracteres de control ASCII codificados heredados, como retorno de carro (U+000A), avance de línea (U+000D) y siguiente línea (U+0085). Unicode no proporciona otros caracteres de control de formato ASCII que presumiblemente no forman parte del modelo de procesamiento de texto sin formato de Unicode. Estos caracteres de control de formato heredados incluyen Tab (U+0009), Tabulación de línea o Tabulación vertical (U+000B) y Avance de página (U+000C), que también se considera un salto de página.
El carácter de espacio (U+0020), que normalmente se introduce con la barra espaciadora del teclado, sirve semánticamente como separador de palabras en muchos idiomas. Por razones heredadas, el UCS también incluye espacios de distintos tamaños que son equivalentes de compatibilidad para el carácter de espacio. Si bien estos espacios de distinto ancho son importantes en tipografía, el modelo de procesamiento Unicode exige que dichos efectos visuales sean manejados por protocolos de texto enriquecido, marcado y otros similares. Se incluyen en el repertorio Unicode principalmente para manejar la transcodificación de ida y vuelta sin pérdida desde otras codificaciones de conjuntos de caracteres. Estos espacios incluyen:
Aparte del espacio ASCII original, los demás espacios son caracteres de compatibilidad. En este contexto, esto significa que no añaden ningún contenido semántico al texto, sino que proporcionan un control de estilo. En Unicode, este control de estilo no semántico se suele denominar texto enriquecido y queda fuera del objetivo principal de Unicode. En lugar de utilizar diferentes espacios en diferentes contextos, este estilo debería gestionarse mediante un software de diseño de texto inteligente.
Otros tres separadores de palabras específicos del sistema de escritura son:
Existen varios caracteres diseñados para ayudar a controlar los saltos de línea, ya sea desalentándolos (caracteres sin saltos) o sugiriendo saltos de línea, como el guión suave (U+00AD) (a veces llamado "guión tímido"). Estos caracteres, aunque están diseñados para dar estilo, son probablemente indispensables para los intrincados tipos de saltos de línea que posibilitan.
Los caracteres que inhiben saltos de línea están pensados para ser equivalentes a una secuencia de caracteres envuelta en el Word Joiner U+2060. Sin embargo, el Word Joiner puede añadirse antes o después de cualquier carácter que permita un salto de línea para inhibir dicho salto de línea.
Tanto los caracteres que inhiben los saltos como los que los permiten participan con otros caracteres de puntuación y espacios en blanco para permitir que los sistemas de imágenes de texto determinen los saltos de línea dentro del algoritmo de salto de línea Unicode. [8]
Todos los puntos de código a los que se les asigna algún tipo de propósito o uso se consideran puntos de código designados. De ellos, pueden estar asignados a un carácter abstracto o designados para algún otro propósito.
La mayoría de los puntos de código que se utilizan actualmente se han asignado a caracteres abstractos. Esto incluye caracteres de uso privado que, aunque no están designados formalmente por el estándar Unicode para un propósito particular, requieren que el remitente y el destinatario hayan acordado de antemano cómo deben interpretarse para que se produzca un intercambio de información significativo.
El UCS incluye 137.468 caracteres de uso privado, que son puntos de código para uso privado repartidos en tres bloques diferentes, cada uno llamado Área de Uso Privado (PUA). El estándar Unicode reconoce los puntos de código dentro de las PUA como códigos de caracteres Unicode legítimos, pero no les asigna ningún carácter (abstracto). En cambio, los individuos, las organizaciones, los proveedores de software, los proveedores de sistemas operativos, los proveedores de fuentes y las comunidades de usuarios finales son libres de usarlos como consideren conveniente. Dentro de los sistemas cerrados, los caracteres en la PUA pueden operar de manera inequívoca, lo que permite que dichos sistemas representen caracteres o glifos no definidos en Unicode. [9] En los sistemas públicos su uso es más problemático, ya que no hay registro ni forma de evitar que varias organizaciones adopten los mismos puntos de código para diferentes propósitos. Un ejemplo de tal conflicto es el uso de U+F8FF por parte de Apple para el logotipo de Apple , frente al uso de U+F8FF por parte del Registro Unicode ConScript como glifo de momificación klingon en la escritura klingon . [10]
El plano multilingüe básico (plano 0) contiene 6.400 caracteres de usuario privado en el área de uso privado PUA , que lleva el mismo nombre y que va desde U+E000 hasta U+F8FF. Los planos de uso privado , plano 15 y plano 16, tienen cada uno sus propias PUA de 65.534 caracteres de uso privado (los dos puntos de código finales de cada plano son no caracteres). Se trata del área de uso privado suplementario A , que va desde U+F0000 hasta U+FFFFD, y del área de uso privado suplementario B , que va desde U+100000 hasta U+10FFFD.
Las PUA son un concepto heredado de ciertos sistemas de codificación asiáticos. Estos sistemas tenían áreas de uso privado para codificar lo que los japoneses llaman gaiji (caracteres raros que no se encuentran normalmente en las fuentes) de maneras específicas para cada aplicación.
El UCS utiliza sustitutos para direccionar caracteres fuera del plano multilingüe básico inicial sin recurrir a representaciones de palabras de más de 16 bits. [11] Hay 1024 sustitutos "altos" (D800–DBFF) y 1024 sustitutos "bajos" (DC00–DFFF). Al combinar un par de sustitutos, se pueden direccionar los caracteres restantes en todos los demás planos (1024 × 1024 = 1048576 puntos de código en los otros 16 planos). En UTF-16 , siempre deben aparecer en pares, como un sustituto alto seguido de un sustituto bajo, utilizando así 32 bits para denotar un punto de código.
Un par sustituto denota el punto de código
donde H y L son los valores numéricos de los sustitutos alto y bajo respectivamente. [12]
Dado que los valores sustitutos altos en el rango DB80–DBFF siempre producen valores en los planos de uso privado, el rango sustituto alto se puede dividir en sustitutos altos (normales) (D800–DB7F) y "sustitutos de uso privado alto" (DB80–DBFF).
Los puntos de código sustituto aislados no tienen una interpretación general; en consecuencia, no se proporcionan tablas de códigos de caracteres ni listas de nombres para este rango. En el lenguaje de programación Python , se utilizan códigos sustitutos individuales para incrustar bytes no decodificables en cadenas Unicode. [13]
El término sin guion "no carácter" se refiere a 66 puntos de código (etiquetados <not a character>
) reservados permanentemente para uso interno y, por lo tanto, se garantiza que nunca se asignarán a un carácter. [14] Cada uno de los 17 planos tiene sus dos puntos de código finales reservados como no caracteres. Por lo tanto, los no caracteres son: U+FFFE y U+FFFF en el BMP, U+1FFFE y U+1FFFF en el Plano 1, y así sucesivamente, hasta U+10FFFE y U+10FFFF en el Plano 16, para un total de 34 puntos de código. Además, hay un rango contiguo de otros 32 puntos de código no caracteres en el BMP: U+FDD0..U+FDEF. Las implementaciones de software son libres de usar estos puntos de código para uso interno. Un ejemplo particularmente útil de un no carácter es el punto de código U+FFFE. Este punto de código tiene la secuencia de bytes UTF-16/UCS-2 inversa de la marca de orden de bytes (U+FEFF). Si una secuencia de texto contiene este carácter no válido, es una buena indicación de que el texto ha sido interpretado con un orden de bytes incorrecto .
Las versiones del estándar Unicode de la 3.1.0 a la 6.3.0 afirmaban que los caracteres no válidos "nunca deberían intercambiarse". La corrección n.° 9 del estándar afirmaba posteriormente que esto estaba provocando un "rechazo excesivo inapropiado", aclarando que "[los caracteres no válidos] no son ilegales en el intercambio ni causan texto Unicode mal formado", y eliminando la afirmación original.
Todos los demás puntos de código, es decir, aquellos que no están designados, se denominan reservados. Estos puntos de código pueden asignarse para un uso particular en futuras versiones del estándar Unicode.
Mientras que muchos otros conjuntos de caracteres asignan un carácter para cada posible representación de glifo del carácter, Unicode busca tratar los caracteres por separado de los glifos. Esta distinción no siempre es inequívoca; sin embargo, algunos ejemplos ayudarán a ilustrar la distinción. A menudo, se pueden combinar dos caracteres tipográficamente para mejorar la legibilidad del texto. Por ejemplo, la secuencia de tres letras "ffi" puede tratarse como un solo glifo. Otros conjuntos de caracteres a menudo asignarían un punto de código a este glifo además de las letras individuales: "f" e "i".
Además, Unicode aborda las letras modificadas diacríticas como caracteres separados que, cuando se representan, se convierten en un solo glifo. Por ejemplo, una "o" con diéresis : " ö ". Tradicionalmente, otros conjuntos de caracteres asignaban un punto de código de carácter único para cada letra modificada diacrítica utilizada en cada idioma. Unicode busca crear un enfoque más flexible al permitir la combinación de caracteres diacríticos para combinarse con cualquier letra. Esto tiene el potencial de reducir significativamente la cantidad de puntos de código activos necesarios para el conjunto de caracteres. Como ejemplo, considere un idioma que usa el alfabeto latino y combina la diéresis con las letras mayúsculas y minúsculas "a", "o" y "u". Con el enfoque Unicode, solo se necesita agregar el carácter diacrítico de diéresis al conjunto de caracteres para usar con las letras latinas: "a", "A", "o", "O", "u" y "U": siete caracteres en total. Un conjunto de caracteres heredado necesita agregar seis letras precompuestas con diéresis además de los seis puntos de código que utiliza para las letras sin diéresis: doce puntos de código de carácter en total.
UCS incluye miles de caracteres que Unicode designa como caracteres de compatibilidad. Se trata de caracteres que se incluyeron en UCS para proporcionar puntos de código distintos para caracteres que otros conjuntos de caracteres diferencian, pero que no se diferenciarían en el enfoque Unicode para los caracteres.
La razón principal de esta diferenciación fue que Unicode hace una distinción entre caracteres y glifos. Por ejemplo, al escribir inglés en cursiva , la letra "i" puede adoptar diferentes formas, ya sea que aparezca al principio de una palabra, al final de una palabra, en el medio de una palabra o de forma aislada. Los idiomas como el árabe escritos en escritura árabe siempre son cursivos. Cada letra tiene muchas formas diferentes. UCS incluye 730 caracteres en forma árabe que se descomponen en solo 88 caracteres árabes únicos. Sin embargo, estos caracteres árabes adicionales se incluyen para que el software de procesamiento de texto pueda traducir texto de otros conjuntos de caracteres a UCS y viceversa sin ninguna pérdida de información crucial para el software que no es Unicode.
Sin embargo, en el caso de UCS y Unicode en particular, el enfoque preferido es siempre codificar o asignar esa letra al mismo carácter sin importar dónde aparezca en una palabra. Luego, las formas distintivas de cada letra se determinan mediante los métodos de software de diseño de texto y fuente. De esta manera, la memoria interna de los caracteres permanece idéntica independientemente de dónde aparezca el carácter en una palabra. Esto simplifica enormemente la búsqueda, la clasificación y otras operaciones de procesamiento de texto.
Cada carácter de Unicode se define mediante un conjunto grande y creciente de propiedades. La mayoría de estas propiedades no forman parte del conjunto de caracteres universal. Las propiedades facilitan el procesamiento de texto, incluida la intercalación o clasificación de texto, la identificación de palabras, oraciones y grafemas, la representación o creación de imágenes de texto, etc. A continuación se incluye una lista de algunas de las propiedades principales. Hay muchas otras documentadas en la base de datos de caracteres Unicode. [15]
Unicode proporciona una base de datos en línea [21] para consultar de forma interactiva todo el repertorio de caracteres Unicode mediante las distintas propiedades.