stringtranslate.com

Caracteres de control Unicode

Muchos caracteres Unicode se utilizan para controlar la interpretación o visualización de texto, pero estos caracteres en sí mismos no tienen representación visual o espacial. Por ejemplo, el carácter nulo ( U+0000  NULL ) se utiliza en entornos de aplicaciones de programación en C para indicar el final de una cadena de caracteres. De esta manera, 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 general Cc , que comprende los códigos de control C0 y C1 , un concepto definido en ISO/IEC 2022 y heredado por Unicode, siendo el conjunto más común el definido en ISO/IEC 6429 . Los códigos de control se manejan de forma 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, incluido 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 . Aunque ISO/IEC 2022 permite la existencia de múltiples conjuntos de códigos de control que especifican diferentes interpretaciones de estos códigos de control, su interpretación más común se especifica en ISO/IEC 6429 (ECMA-48).

La serie de codificaciones ISO/IEC 8859 cumple con el nivel 1 de la norma ISO/IEC 4873 (ECMA-43), un subconjunto de la norma 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 la categoría "Cc" pueden servir para una variedad de 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 juegan un papel explícito en el manejo de texto Unicode, y son utilizados únicamente por protocolos de nivel superior como los utilizados por los emuladores de terminal . Ciertos caracteres se utilizan comúnmente para fines de formato o centinela :

Unicode sólo 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 C1 NEL ). 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 como predeterminada la interpretación definida en ISO/IEC 6429. [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]

Separadores introducidos en Unicode

En un intento por simplificar los diversos caracteres de nueva línea utilizados en el texto heredado [ cita requerida ] , Unicode introduce sus propios caracteres de nueva 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 el propio Unicode. Se asignan a categorías sui generis de Unicode 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 anteriormente se utilizaban como etiquetas de idioma. Estos caracteres reflejaban esencialmente los 128 caracteres ASCII, pero se utilizaban para identificar el texto posterior como perteneciente a un idioma en particular según BCP 47. Por ejemplo, para indicar que el texto posterior es la variante del inglés tal como se escribe en los Estados Unidos, se habría utilizado la secuencia U+E0001 ETIQUETA DE IDIOMA , U +E0065 ETIQUETA LETRA E MINÚSCULA LATINA, U+E006E ETIQUETA LETRA N MINÚSCULA LATINA, U+E002D ETIQUETA GUIÓN-MINUS , U+E0075 ETIQUETA LETRA U MINÚSCULA LATINA y U+E0073 ETIQUETA LETRA S MINÚSCULA LATINA.

Estos caracteres de las etiquetas de idioma no se mostrarían por sí mismos, pero 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 de Unihan podría haber sustituido glifos diferentes si las etiquetas de idioma indicaban coreano o si indicaban japonés. Otro ejemplo podría haber influido en la visualización de los dígitos decimales del 0 al 9 de forma diferente 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 despejar 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 simple sigue siendo un mecanismo obsoleto para transmitir información de idioma sobre el texto". [8]

Anotación interlineal

Tres caracteres de formato proporcionan compatibilidad con la anotación interlineal ( U+FFF9 INTERLINEAR ANNOTATION ANCHOR , U+FFFA INTERLINEAR ANNOTATION SEPARATOR , U+FFFB INTERLINEAR ANNOTATION TERMINATOR ). Esto se puede utilizar para proporcionar notas que normalmente se mostrarían entre las líneas de otro texto. Unicode considera que dicha anotación es texto enriquecido y recomienda utilizar otros protocolos para dicha anotación. 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 debería mostrar caracteres de derecha a izquierda, como las letras hebreas, como de derecha a izquierda simplemente a partir de las propiedades de esos caracteres. De manera similar, Unicode maneja la mezcla de texto de izquierda a derecha junto con texto de derecha a izquierda sin ningún carácter especial. Por ejemplo, se pueden citar las letras árabes ("بسم الله") (traducidas al español como "Bismillah") junto con las letras inglesas y las letras árabes fluirán de derecha a izquierda y las letras latinas de izquierda a derecha.

Sin embargo, la direccionalidad puede no detectarse correctamente si se cita un texto de izquierda a derecha al comienzo de un párrafo de derecha a izquierda (o viceversa ), [2] y el soporte para texto bidireccional se vuelve aún más complicado cuando el texto que fluye en direcciones opuestas se incrusta 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 desea que se anulen los caracteres de izquierda a derecha 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 incrustado hasta 125 niveles de profundidad: [9]

Selectores de variación

Muchos caracteres se asignan a glifos alternativos según el contexto. Por ejemplo, los caracteres cursivos árabes y latinos sustituyen glifos diferentes para conectar glifos entre sí según si el carácter es el carácter inicial de una palabra, el carácter final, un carácter intermedio o un carácter aislado. Estos tipos de sustitución de glifos se gestionan fácilmente mediante el contexto del carácter sin necesidad de ninguna otra intervención del autor. Los autores también pueden utilizar caracteres especiales, como caracteres de unión y caracteres no de unión, para forzar una forma alternativa de glifo donde de otro modo no aparecería. Las ligaduras son casos similares en los que los glifos se pueden sustituir simplemente activando o desactivando las ligaduras como un atributo de texto enriquecido.

Sin embargo, para la sustitución de otros glifos, es posible que la intención del autor deba codificarse con el texto y no pueda determinarse contextualmente. Este es el caso de los caracteres/glifos denominados gaiji , en los que 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 carácter ideográfico del que deriva, se trata de una variante de glifo simple o de una variante de carácter. A partir de Unicode 3.2 y 4.0, el conjunto de caracteres incluye ahora 256 selectores de variación, de modo que estos caracteres de marca de combinación pueden seleccionar entre 256 posibles variaciones de caracteres/glifos para el carácter precedente.

Imágenes de control

Unicode proporciona caracteres gráficos para representar códigos de control C0 (y espacio y una nueva línea genérica ) en el bloque Imágenes de control . Son representaciones visuales, no los códigos de control en sí. No existen caracteres equivalentes para los códigos de control C1 .

Véase también

Referencias

  1. ^ ab "Alias ​​de nombres". Base de datos de caracteres Unicode . Consorcio Unicode .
  2. ^ ab Segan, Danilo. "Hacia un escritorio localizado". Para algunos casos en los que la toma de decisiones automática no funciona, puede agregar manualmente marcadores de dirección específicos haciendo clic derecho en el campo de texto, eligiendo "Insertar carácter de control Unicode" en el menú y seleccionando la marca de dirección adecuada. Esto le permitiría, por ejemplo, comenzar su texto RTL con una palabra que normalmente sería LTR (como "GNOME").
  3. ^ ISO/IEC JTC 1/SC 2/WG 3 (12 de febrero de 1998). 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 )
  4. ^ ISO/TC 97/SC 2 (1975). El conjunto de caracteres de control de la norma ISO 646 (PDF) . ITSCJ/ IPSJ . ISO-IR -1.{{citation}}: CS1 maint: nombres numéricos: lista de autores ( enlace )
  5. ^ Consorcio Unicode (2019). 23.1: Códigos de control (PDF) (edición 12.0.0). págs. 868–870. ISBN 978-1-936213-22-1. {{cite book}}: |work=ignorado ( ayuda )
  6. ^ Ewell, Doug (16 de octubre de 2020). "Gráficos de mosaico separados por teletexto". Archivo de listas de correo Unicode . Consorcio Unicode . Reitero que fueron UTC [ Comité Técnico Unicode ] y Script Ad Hoc quienes brindaron orientación al grupo que escribió la propuesta de Símbolos para la Computación Legacy (y hay una segunda en camino) de que 0x00 a 0x1F en el conjunto de teletexto original debería asignarse a U+0000 a U+001F al convertir a Unicode.
  7. ^ Klensin, John C.; Presuhn, Randy; Whistler, Ken; Dürst, Martin J.; Adams, Glenn (noviembre de 2010). Presuhn, R. (ed.). "RFC6082: Desuso de caracteres de etiquetas de lenguaje Unicode: RFC 2482 es histórico". Grupo de trabajo de ingeniería de Internet (IETF). doi : 10.17487/RFC6082 . {{cite journal}}: Requiere citar revista |journal=( ayuda )
  8. ^ ab "Unicode 8.0.0, Implicaciones para la migración". Consorcio Unicode.
  9. ^ "UAX #9: Algoritmo bidireccional Unicode". Consorcio Unicode. 9 de mayo de 2018.