Muchos caracteres Unicode se utilizan para controlar la interpretación o visualización del texto, pero estos caracteres en sí mismos no tienen representación visual ni espacial. Por ejemplo, el carácter nulo ( U+0000 NULL ) se utiliza en entornos de programación en C para indicar el final de una cadena de caracteres. De esta forma, estos programas solo requieren una única dirección de memoria inicial para una cadena (en lugar de una dirección inicial y una longitud), ya que la cadena termina una vez que el programa lee el carácter nulo.
En el sentido más estricto, un código de control es un carácter con la categoría generalCc , que comprende los códigos de control C0 y C1 , un concepto definido en ISO/IEC 2022 y heredado por Unicode, con el conjunto más común definido en ISO/IEC 6429 . Los códigos de control se manejan de manera distinta a los caracteres Unicode ordinarios, por ejemplo, al no asignárseles nombres de caracteres (aunque se les asignan alias formales normativos). [ 1 ] En un sentido más amplio, otros caracteres de formato no imprimibles, como los utilizados en texto bidireccional , también son denominados caracteres de control por el software; [ 2 ] estos se asignan principalmente a la categoría general Cf(formato ), utilizada para los efectores de formato introducidos y definidos por el propio Unicode.
Códigos de control de categoría "Cc" (C0 y C1)
Los rangos de códigos de control 0x00–0x1F ("C0") y 0x7F tienen su origen en la edición de 1967 de US-ASCII . La norma ISO/IEC 2022 (ECMA-35) define métodos de extensión para ASCII, incluyendo un rango secundario "C1" de códigos de control de 8 bits desde 0x80 hasta 0x9F, equivalente a secuencias de 7 bits de ESC con los bytes 0x40 a 0x5F. En conjunto, los códigos en estos rangos se conocen como códigos de control C0 y C1 . Si bien ISO/IEC 2022 permite la existencia de múltiples conjuntos de códigos de control que especifican diferentes interpretaciones de estos códigos, su interpretación más común se especifica en ISO/IEC 6429 (ECMA-48).
La serie de codificaciones ISO/IEC 8859 se ajusta al nivel 1 de ISO/IEC 4873 (ECMA-43), un subconjunto de ISO/IEC 2022 diseñado para codificaciones de caracteres de 8 bits, y por lo tanto reserva el rango 0x80–0x9F para su uso como códigos no imprimibles por conjuntos de códigos de control C1 como ISO/IEC 6429. [ 3 ] Unicode hereda sus bloques primero y segundo (que comprenden U+0000 a U+00FF) de ASCII e ISO/IEC 8859-1 , incorporando así los rangos de códigos de control C0 y C1 (U+0000 – U+001F, U+007F – U+009F) como categoría general "Cc". No asigna nombres normativos a estos códigos de control, aunque sí les asigna alias normativos. [ 1 ]
Los códigos de control de categoría "Cc" pueden tener diversos propósitos, no limitados a los efectores de formato: por ejemplo, el conjunto ASCII C0 predeterminado incluye seis efectores de formato ( BS , HT , LF , VT , FF y CR ), diez controles de transmisión, cuatro controles de dispositivo, cuatro separadores de información y otros ocho códigos de control. [ 4 ] La mayoría de estos caracteres no desempeñan un papel explícito en el manejo de texto Unicode y solo se utilizan en protocolos de nivel superior, como los que utilizan los emuladores de terminal . Ciertos caracteres se utilizan comúnmente para fines de formato o de centinela :
- U+0000 NULL (utilizado en cadenas terminadas en nulo )
- U+0009 TABULACIÓN HORIZONTAL (HT) (insertada por la tecla Tab )
- U+000A SALTO DE LÍNEA (LF) (utilizado como un salto de línea )
- U+000C SALTO DE FORMULARIO (FF) (indica un salto de página en un archivo de texto plano)
- U+000D RETORNO DE CARRO (CR) (utilizado en algunas convenciones de salto de línea)
- U+0085 SIGUIENTE LÍNEA (NEL) (a veces se utiliza como salto de línea en texto transcodificado de EBCDIC )
Unicode solo especifica la semántica para U+0009 — U+000D , U+001C — U+001F y U+0085 (los efectores de formato ASCII excepto BS , más los separadores de información ASCII y el NEL C1 ). El resto de los códigos de control "Cc" son transparentes para Unicode y sus significados se dejan a protocolos de nivel superior, aunque se sugiere la interpretación definida en ISO/IEC 6429 como predeterminada. [ 5 ] Además, ciertos protocolos especializados de nivel superior, como el teletexto transcodificado , pueden incluir una interpretación diferente de todo el rango de códigos de control C0. [ 6 ]
Unicode introdujo separadores
En un intento por simplificar los diversos caracteres de salto de línea utilizados en textos antiguos, Unicode introdujo sus propios caracteres de salto de línea para separar líneas o párrafos: U+2028 SEPARADOR DE LÍNEA (abreviado LS o LSEP) y U+2029 SEPARADOR DE PÁRRAFO (abreviado PS o PSEP).
Al igual que CR y LF, LS y PS son efectores para el formato de texto; a diferencia de CR y LF, no se tratan como "códigos de control" para los fines de ECMA-35 / ECMA-48 (categoría Cc), sino que tienen una semántica definida completamente por Unicode. Se asignan a categorías Unicode sui generis y respectivamente, bajo la categoría principal (separador) utilizada para ciertos caracteres de espacio en blanco .ZlZpZ
Etiquetas de idioma
Unicode incluye 128 caracteres, ahora en desuso, que originalmente se utilizaban como etiquetas de idioma. Estos caracteres eran esencialmente un reflejo de los 128 caracteres ASCII, pero se usaban para identificar el texto subsiguiente como perteneciente a un idioma en particular, según el BCP 47. Por ejemplo, para indicar que el texto subsiguiente era la variante del inglés escrito en los Estados Unidos, se habría utilizado la secuencia U+E0001 ETIQUETA DE IDIOMA , U+E0065 ETIQUETA LETRA MINÚSCULA LATINA E , U+ E006E ETIQUETA LETRA MINÚSCULA LATINA N , U+E002D ETIQUETA GUION-MINUS , U+E0055 ETIQUETA LETRA MAYÚSCULA LATINA U y U+E0053 ETIQUETA LETRA MAYÚSCULA LATINA S.
Estos caracteres de etiquetas de idioma no se mostrarían directamente. Sin embargo, proporcionarían información para el procesamiento de texto o incluso para la visualización de otros caracteres. Por ejemplo, la visualización de los ideogramas Unihan podría haber sustituido a glifos diferentes si las etiquetas de idioma indicaban coreano que si indicaban japonés. Otro ejemplo: la visualización de los dígitos decimales del 0 al 9 podría haber influido de forma distinta según el idioma en el que aparecieran.
Los caracteres de etiqueta U+E0001 LANGUAGE TAG y U+E007F CANCEL TAG quedaron obsoletos en Unicode 5.1 (2008) y no deben usarse para información de idioma. [ 7 ] Los caracteres U+E0020—U+E0073 también quedaron obsoletos, pero se restauraron con el lanzamiento de Unicode 8.0 (2015). El cambio se realizó "para allanar el camino para el posible uso futuro de caracteres de etiqueta para un propósito distinto al de representar etiquetas de idioma". [ 8 ] Unicode afirma que "el uso de caracteres de etiqueta para representar etiquetas de idioma en un flujo de texto plano sigue siendo un mecanismo obsoleto para transmitir información de idioma sobre el texto. [ 8 ]
anotación interlineal
Tres caracteres de formato permiten la anotación interlineal ( U+FFF9, ANCLA DE ANOTACIÓN INTERLINEAL ; U+FFFA, SEPARADOR DE ANOTACIÓN INTERLINEAL ; U+FFFB, TERMINADOR DE ANOTACIÓN INTERLINEAL ). Esto se puede usar para agregar notas que normalmente se mostrarían entre las líneas de otro texto. Unicode considera dicha anotación como texto enriquecido y recomienda usar otros protocolos para ello. La recomendación de marcado Ruby del W3C es un ejemplo de un protocolo alternativo que admite una anotación interlineal más avanzada.
Control de texto bidireccional
Unicode admite texto bidireccional estándar sin caracteres especiales. En otras palabras, el software compatible con Unicode debe mostrar los caracteres de derecha a izquierda, como las letras hebreas, de derecha a izquierda, aprovechando las propiedades de dichos caracteres. Del mismo modo, Unicode maneja la combinación de texto de izquierda a derecha y de derecha a izquierda sin caracteres especiales. Por ejemplo, se puede citar árabe ("بسم الله") (traducido al inglés como "Bismillah") junto con inglés, y las letras árabes fluirán de derecha a izquierda y las latinas de izquierda a derecha.
Sin embargo, la direccionalidad puede no detectarse correctamente si se cita texto de izquierda a derecha al comienzo de un párrafo de derecha a izquierda (o viceversa ), [ 2 ] y la compatibilidad con texto bidireccional se complica aún más cuando el texto que fluye en direcciones opuestas se inserta jerárquicamente, por ejemplo, si un texto en inglés cita una frase en árabe que a su vez cita una frase en inglés. Otras situaciones también pueden complicar esto, como cuando un autor quiere que los caracteres de izquierda a derecha se anulen para que fluyan de derecha a izquierda. Si bien estas situaciones son bastante raras, Unicode proporciona doce caracteres para ayudar a controlar estos niveles de texto bidireccional insertado hasta 125 niveles de profundidad: [ 9 ]
- U+061C MARCA DE LETRA ÁRABE
- U+200E MARCA DE IZQUIERDA A DERECHA
- U+200F MARCA DE DERECHA A IZQUIERDA
- U+202A INCRUSTACIÓN DE IZQUIERDA A DERECHA
- U+202B INCRUSTACIÓN DE DERECHA A IZQUIERDA
- FORMATO DIRECCIONAL U+202C POP
- U+202D ANULACIÓN DE IZQUIERDA A DERECHA
- U+202E ANULACIÓN DE DERECHA A IZQUIERDA
- U+2066 AISLAMIENTO DE IZQUIERDA A DERECHA
- U+2067 AISLAMIENTO DE DERECHA A IZQUIERDA
- U+2068 PRIMER AISLADO FUERTE
- U+2069 POP AISLADO DIRECCIONAL
Selectores de variación
Muchos caracteres se corresponden con glifos alternativos según el contexto. Por ejemplo, los caracteres cursivos árabes y latinos sustituyen diferentes glifos para conectarse entre sí, dependiendo de si el carácter es el inicial, el final, un carácter intermedio o un carácter aislado de una palabra. Este tipo de sustitución de glifos se gestiona fácilmente mediante el contexto del carácter, sin necesidad de intervención del autor. Los autores también pueden usar caracteres especiales, como conectores y no conectores, para forzar una forma alternativa de glifo donde de otro modo no aparecería. Las ligaduras son ejemplos similares, donde los glifos se pueden sustituir simplemente activando o desactivando las ligaduras como atributo de texto enriquecido.
Sin embargo, para otras sustituciones de glifos, la intención del autor puede necesitar ser codificada con el texto y no puede determinarse contextualmente. Este es el caso de los caracteres/glifos denominados gaiji , donde se utilizan diferentes glifos para el mismo carácter, ya sea históricamente o para ideogramas de apellidos. Esta es una de las áreas grises a la hora de distinguir entre un glifo y un carácter. Si un apellido difiere ligeramente del ideograma del que deriva, ¿se trata de una simple variante de glifo o de una variante de carácter? A partir de Unicode 3.2 y 4.0, el conjunto de caracteres ahora incluye 256 selectores de variación, de modo que estos caracteres de marca combinatoria pueden seleccionar entre 256 posibles variaciones de carácter/glifo para el carácter precedente.
Imágenes de control
Unicode proporciona caracteres gráficos para representar los códigos de control C0 (y el espacio y un salto de línea genérico ) en el bloque de imágenes de control . Son representaciones visuales, no los códigos de control propiamente dichos. No existen caracteres equivalentes para los códigos de control C1 .
Véase también
Referencias
- 1 2 "Alias de nombre" . Base de datos de caracteres Unicode . Consorcio Unicode .
- 1 2 Segan, Danilo. "Hacia un escritorio localizado" .
En algunos casos donde la toma de decisiones automática no funciona, puede agregar manualmente marcadores de dirección específicos haciendo clic con el botón derecho en el campo de texto, eligiendo "Insertar carácter de control Unicode" en el menú y seleccionando el marcador de dirección apropiado. Esto le permitiría, por ejemplo, comenzar su texto RTL con una palabra que de otro modo se escribiría LTR (como "GNOME").
- ↑ ISO/IEC JTC 1/SC 2/WG 3 (1998-02-12). Texto final de DIS 8859-1, conjuntos de caracteres gráficos codificados de un solo byte de 8 bits—Parte 1: Alfabeto latino n.° 1 (PDF) . ISO / IEC FDIS 8859-1:1998; JTC1/SC2/N2988; WG3/N411.
Este conjunto de caracteres gráficos codificados puede considerarse una versión de un código de 8 bits según ISO/IEC 2022 o ISO/IEC 4873 en el nivel 1. […] Las posiciones sombreadas en la tabla de códigos corresponden a combinaciones de bits que no representan caracteres gráficos. Su uso está fuera del alcance de ISO/IEC 8859; se especifica en otras normas internacionales, por ejemplo, ISO/IEC 6429.
{{citation}}: CS1 maint: nombres numéricos: lista de autores ( enlace ) - ↑ ISO/TC 97/SC 2 (1975). El conjunto de caracteres de control de la ISO 646 (PDF) . ITSCJ/ IPSJ . ISO-IR -1.
{{citation}}: CS1 maint: nombres numéricos: lista de autores ( enlace ) - ↑ Consorcio Unicode (2019). «23.1: Códigos de control» (PDF) . El estándar Unicode ( ed. 12.0.0 ). págs. 868–870 . ISBN 978-1-936213-22-1.
- ↑ Ewell, Doug (16 de octubre de 2020). "Gráficos de mosaico separados de teletexto" . Archivo de la lista de correo de Unicode . Consorcio Unicode .
Reitero que fue
el Comité Técnico de Unicode
( UTC
)
y el Comité Ad Hoc de Script quienes proporcionaron la orientación al grupo que escribió la propuesta de
Símbolos para Computación Heredada
(y hay una segunda en camino) de que los caracteres 0x00 a 0x1F en el conjunto de teletexto original deberían asignarse a U+0000 a U+001F al convertirlos a Unicode.
- ↑ Klensin, John C.; Presuhn, Randy; Whistler, Ken; Dürst, Martin J.; Adams, Glenn (noviembre de 2010). Presuhn, R. (ed.). "RFC6082: Desaprobando los caracteres de etiquetas de idioma Unicode: RFC 2482 es histórico" . Grupo de trabajo de ingeniería de Internet (IETF). doi : 10.17487/RFC6082 .
- 1 2 "Unicode 8.0.0, Implicaciones para la migración" . Consorcio Unicode.
- ↑ "UAX #9: Algoritmo bidireccional Unicode" . Consorcio Unicode. 9 de mayo de 2018.
- Puntos de código especiales Unicode