Personaje de control

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Código apunta en un conjunto de caracteres, que no representa un símbolo escrito

En informática y telecomunicaciones, un carácter de control o carácter no imprimible (NPC) es un punto de código (un número) en un conjunto de caracteres, que no representa un símbolo escrito. Se utilizan como señalización dentro de la banda para provocar efectos distintos de la adición de un símbolo al texto. Todos los demás caracteres son principalmente de impresión, imprimibles o caracteres gráficos, excepto quizás el "espacio" (consulte Caracteres imprimibles ASCII).

Historia

Los signos de procedimiento en código Morse son una forma de carácter de control.

Se introdujo una forma de caracteres de control en el código Baudot de 1870: NUL y DEL. El código Murray de 1901 agregó el retorno de carro (CR) y el avance de línea (LF), y otras versiones del código Baudot incluyeron otros caracteres de control.

El carácter de campana (BEL), que hacía sonar una campana para alertar a los operadores, también fue uno de los primeros caracteres de control de teletipo.

Los caracteres de control también se denominan "efectores de formato".

En ASCII

Se definieron bastantes caracteres de control (33 en ASCII y el estándar ECMA-48 agrega 32 más). Esto se debió a que los primeros terminales tenían controles mecánicos o eléctricos muy primitivos que hacían que cualquier tipo de API que recordara el estado fuera bastante costosa de implementar, por lo que un código diferente para cada función parecía un requisito. Rápidamente se hizo posible y económico interpretar secuencias de códigos para realizar una función, y los fabricantes de dispositivos encontraron una manera de enviar cientos de instrucciones de dispositivos. Específicamente, usaron el código ASCII 27 (escape), seguido de una serie de caracteres llamados "secuencia de control" o "secuencia de escape". El mecanismo fue inventado por Bob Bemer, el padre de ASCII. Por ejemplo, la secuencia del código 27, seguida de los caracteres imprimibles "[2;10H", haría que un terminal VT100 de Digital Equipment Corporation moviera su cursor a la décima celda de la segunda línea de la pantalla. Existen varios estándares para estas secuencias, en particular ANSI X3.64. Pero la cantidad de variaciones no estándar en el uso es grande, especialmente entre las imprentas, donde la tecnología ha avanzado mucho más rápido de lo que cualquier organismo de estándares puede seguir.

Todas las entradas en la tabla ASCII debajo del código 32 (técnicamente el conjunto de códigos de control C0) son de este tipo, incluidos CR y LF que se usan para separar líneas de texto. El código 127 (DEL) también es un carácter de control. Los conjuntos ASCII extendidos definidos por ISO 8859 agregaron los códigos 128 a 159 como caracteres de control, esto se hizo principalmente para que si se eliminaba el bit alto, no cambiaría un carácter de impresión a un código de control C0, pero ha habido algunas asignaciones aquí, en particular NEL. Este segundo conjunto se denomina conjunto C1.

Estos 65 códigos de control se transfirieron a Unicode. Unicode agregó más caracteres que podrían considerarse controles, pero hace una distinción entre estos "Caracteres de formato" (como el no ensamblador de ancho cero) y los 65 caracteres de control.

El conjunto de caracteres del código de intercambio decimal codificado en binario extendido (EBCDIC) contiene 65 códigos de control, incluidos todos los códigos de control ASCII más códigos adicionales que se utilizan principalmente para controlar los periféricos de IBM.

Códigos de control ASCII.
0x000x10
0x00 NUL DLE
0x01 SOH DC1
0x02 STX DC2
0x03 ETX DC3
0x04 EOT DC4
0x05 ENQ NAK
0x06 ACK SYN
0x07 BEL ETB
0x08 BS CAN
0x09 HT EM
0x0A LF SUB
0x0B VT ESC
0x0C FF SM
0x0D CR SG
0x0E SO RS
0x0F SI EE.UU.
0x7F DEL

Los caracteres de control en ASCII que todavía son de uso común incluyen:

  • 0 (null, NUL, , ^@), originalmente destinado a ser un personaje ignorado, pero ahora utilizado por muchos lenguajes de programación incluyendo C para marcar el final de una cadena.
  • 7 (Bell, BEL, a, ^G), que puede causar que el dispositivo emita una advertencia como un sonido de campana o pitido o el flash de pantalla.
  • 8 (backspace, BS, b, ^H), puede sobreimprimir el personaje anterior.
  • 9 (pista horizontal, HT, t, ^I), mueve la posición de impresión a la siguiente parada de pestañas.
  • 10 (alimentación en línea, LF, n, ^J), mueve la cabeza de impresión por una línea, o al borde izquierdo y abajo. Utilizado como el marcador final de línea en la mayoría de los sistemas y variantes UNIX.
  • 11 (pista vertical, VT, v, ^K), tabulación vertical.
  • 12 (form feed, FF, f, ^L), para hacer que una impresora expulse papel a la parte superior de la siguiente página, o una terminal de vídeo para limpiar la pantalla.
  • 13 (retorno de carga, CR, r, ^M), mueve la posición de impresión al comienzo de la línea, permitiendo sobreimpresión. Utilizado como el marcador final de línea en el sistema operativo Classic Mac, OS-9, FLEX (y variantes). A CR+LF par es utilizado por CP/M-80 y sus derivados incluyendo DOS y Windows, y por protocolos de capa de aplicaciones como FTP, SMTP y HTTP.
  • 26 (Control-Z, SUB, EOF, ^Z). Actúa como un final de archivo para el archivo de texto de Windows i/o.
  • 27 (Escape, ESC, e (GCC only), ^[). Presenta una secuencia de escape.

Los caracteres de control pueden describirse como haciendo algo cuando el usuario los ingresa, como el código 3 (carácter de fin de texto, ETX, ^C) para interrumpir el proceso en ejecución, o el código 4 (Carácter de fin de transmisión, EOT, ^D), utilizado para finalizar la entrada de texto o para salir de un shell de Unix. Estos usos generalmente tienen poco que ver con su uso cuando están en la salida de texto, y en los sistemas modernos generalmente no involucran la transmisión del número de código en absoluto (en su lugar, el programa obtiene el hecho de que el usuario está presionando la tecla Ctrl). y pulsando la tecla marcada con una 'C').

En Unicode

En Unicode, "Caracteres de control" son U+0000—U+001F (controles C0), U+007F (eliminar) y U+0080—U+009F (controles C1). Su categoría general es "Cc". Los códigos de formato son distintos, en la categoría general "Cf". Los caracteres de control Cc no tienen nombre en Unicode, pero reciben etiquetas como "<control-001A>" en cambio.

Pantalla

Existen varias técnicas para mostrar caracteres no imprimibles, que se pueden ilustrar con el carácter de campana en codificación ASCII:

  • Code point: decimal 7, hexadecimal 0x07
  • Una abreviatura, a menudo tres letras mayúsculas: BEL
  • Un personaje especial que condensa la abreviatura: Unicode U+2407 (␇), "símbolo para campana"
  • Representación gráfica ISO 2047: Unicode U+237E (⍾), "gráfico para campana"
  • Nota de cuidado en ASCII, donde el punto de código 00xxxxxxx es representado como un cuidado seguido por la letra capital en el punto de código 10xxxxxxx: ^G
  • Una secuencia de escape, como en los códigos de cadena de caracteres C/C++: a, 07, x07, etc.

Cómo se asignan los caracteres de control a los teclados

Los teclados basados en ASCII tienen una tecla denominada "Control", "Ctrl" o (raramente) "Cntl" que se usa de manera muy similar a una tecla de mayúsculas, y se presiona en combinación con otra tecla de letra o símbolo. En una implementación, la tecla de control genera el código 64 lugares debajo del código de la letra mayúscula (generalmente) con la que se presiona en combinación (es decir, resta 64 del valor del código ASCII en decimal de la letra mayúscula (generalmente)). La otra implementación es tomar el código ASCII producido por la clave y AND bit a bit con 31, obligando a los bits 6 y 7 a cero. Por ejemplo, al pulsar "control" y la letra "g" o "G" (código 107 en octal o 71 en base 10, que es 01000111 en binario), produce el código 7 (Bell, 7 en base 10 o 00000111 en binario). El carácter NULL (código 0) está representado por Ctrl-@, "@" siendo el código inmediatamente antes de "A" en el conjunto de caracteres ASCII. Por comodidad, muchas terminales aceptan Ctrl-Espacio como alias de Ctrl-@. En cualquier caso, esto produce uno de los 32 códigos de control ASCII entre 0 y 31. Este enfoque no puede representar el carácter DEL debido a su valor (código 127), pero Ctrl-? se usa a menudo para este carácter, como restar 64 de un '?' da −1, que si se enmascara a 7 bits es 127.

Cuando se mantiene presionada la tecla de control, las teclas de letras producen los mismos caracteres de control, independientemente del estado de las teclas Mayús o Bloq Mayús. En otras palabras, no importa si la clave habría producido una letra mayúscula o minúscula. La interpretación de la tecla de control con el espacio, el carácter gráfico y las teclas de dígitos (códigos ASCII 32 a 63) varía entre sistemas. Algunos producirán el mismo código de caracteres que si no se mantuviera presionada la tecla de control. Otros sistemas traducen estas teclas en caracteres de control cuando se mantiene pulsada la tecla de control. La interpretación de la clave de control con claves no ASCII ("extranjeras") también varía entre sistemas.

Los caracteres de control a menudo se convierten en una forma imprimible conocida como notación de intercalación imprimiendo un intercalado (^) y luego el carácter ASCII que tiene un valor del carácter de control más 64. Los caracteres de control generados usando teclas de letras se muestran por lo tanto con el forma mayúscula de la letra. Por ejemplo, ^G representa el código 7, que se genera al presionar la tecla G cuando se mantiene presionada la tecla de control.

Los teclados también suelen tener algunas teclas individuales que producen códigos de caracteres de control. Por ejemplo, la tecla etiquetada como "Retroceso" normalmente produce el código 8, "Tab" código 9, "Introducir" o "Volver" código 13 (aunque algunos teclados pueden generar el código 10 para "Entrar").

Muchos teclados incluyen teclas que no corresponden a ningún carácter de control o imprimible ASCII, por ejemplo, flechas de control del cursor y funciones de procesamiento de texto. Las pulsaciones de teclas asociadas se comunican a los programas de computadora mediante uno de cuatro métodos: apropiación de caracteres de control que de otro modo no se utilizarían; usando alguna codificación que no sea ASCII; usando secuencias de control de múltiples caracteres; o usando un mecanismo adicional fuera de la generación de caracteres. "tonto" los terminales informáticos suelen utilizar secuencias de control. Los teclados conectados a computadoras personales independientes fabricadas en la década de 1980 suelen utilizar uno (o ambos) de los dos primeros métodos. Los teclados de computadora modernos generan códigos de escaneo que identifican las teclas físicas específicas que se presionan; Luego, el software de computadora determina cómo manejar las teclas que se presionan, incluido cualquiera de los cuatro métodos descritos anteriormente.

El propósito del diseño

Los caracteres de control se diseñaron para clasificarse en algunos grupos: control de impresión y visualización, estructuración de datos, control de transmisión y varios.

Control de impresión y visualización

Los caracteres de control de impresión se utilizaron por primera vez para controlar el mecanismo físico de las impresoras, el primer dispositivo de salida. Un ejemplo temprano de esta idea fue el uso de Figuras (FIGS) y Letras (LTRS) en el código Baudot para cambiar entre dos páginas de códigos. Un ejemplo posterior, pero aún temprano, fueron los caracteres de control de transporte ASA fuera de banda. Posteriormente, los caracteres de control se integraron en el flujo de datos a imprimir. El carácter de retorno de carro (CR), cuando se envía a dicho dispositivo, hace que coloque el carácter en el borde del papel en el que comienza la escritura (puede, o no, también mover la posición de impresión a la siguiente línea). El carácter de avance de línea (LF/NL) hace que el dispositivo coloque la posición de impresión en la siguiente línea. Puede (o no), según el dispositivo y su configuración, también mover la posición de impresión al comienzo de la siguiente línea (que sería la posición más a la izquierda para las escrituras de izquierda a derecha, como los alfabetos utilizados para Western). idiomas, y la posición más a la derecha para escrituras de derecha a izquierda, como los alfabetos hebreo y árabe). Los caracteres de tabulación verticales y horizontales (VT y HT/TAB) hacen que el dispositivo de salida mueva la posición de impresión a la siguiente tabulación en la dirección de lectura. El carácter de avance de página (FF/NP) inicia una nueva hoja de papel y puede moverse o no al comienzo de la primera línea. El carácter de retroceso (BS) mueve la posición de impresión un espacio de carácter hacia atrás. En las impresoras, incluidas las terminales de copias impresas, esto se usa con mayor frecuencia para que la impresora pueda sobreimprimir caracteres para crear otros caracteres que normalmente no están disponibles. En terminales de video y otros dispositivos electrónicos de salida, a menudo hay opciones de configuración de software (o hardware) que permiten un retroceso destructivo (por ejemplo, una secuencia BS, SP, BS), que borra, o uno no destructivo, que no lo hace. Los caracteres de entrada y salida (SI y SO) seleccionaron conjuntos de caracteres alternativos, fuentes, subrayado u otros modos de impresión. Las secuencias de escape a menudo se usaban para hacer lo mismo.

Con la llegada de las terminales informáticas que no imprimían físicamente en papel y, por lo tanto, ofrecían más flexibilidad con respecto a la ubicación de la pantalla, el borrado, etc., se adaptaron los códigos de control de impresión. Los avances de formulario, por ejemplo, generalmente borraban la pantalla, ya que no había una nueva página de papel a la que moverse. Se desarrollaron secuencias de escape más complejas para aprovechar la flexibilidad de los nuevos terminales y, de hecho, de las impresoras más nuevas. El concepto de un personaje de control siempre había sido algo limitante, y lo era extremadamente cuando se usaba con hardware nuevo y mucho más flexible. Las secuencias de control (a veces implementadas como secuencias de escape) podían igualar la nueva flexibilidad y potencia y se convirtieron en el método estándar. Sin embargo, hubo, y sigue existiendo, una gran variedad de secuencias estándar para elegir.

Estructuración de datos

Los separadores (Archivo, Grupo, Registro y Unidad: FS, GS, RS y US) se hicieron para estructurar datos, generalmente en una cinta, para simular tarjetas perforadas. Fin de medio (EM) advierte que la cinta (u otro medio de grabación) está finalizando. Si bien muchos sistemas usan CR/LF y TAB para estructurar datos, es posible encontrar los caracteres de control separadores en datos que necesitan estructurarse. Los caracteres de control del separador no están sobrecargados; no hay un uso general de ellos excepto para separar datos en agrupaciones estructuradas. Sus valores numéricos son contiguos al carácter de espacio, que puede considerarse miembro del grupo, como separador de palabras.

Por ejemplo, RFC 7464 (secuencias de texto JSON) utiliza el separador RS para codificar una secuencia de elementos JSON. Cada elemento de la secuencia comienza con un carácter RS y termina con un salto de línea. Esto permite serializar secuencias JSON abiertas. Es uno de los protocolos de transmisión JSON.

Control de transmisión

Los caracteres de control de transmisión estaban destinados a estructurar un flujo de datos y administrar la retransmisión o la falla correcta, según sea necesario, frente a errores de transmisión.

El carácter de inicio de encabezado (SOH) era para marcar una sección sin datos de un flujo de datos, la parte de un flujo que contiene direcciones y otros datos de mantenimiento. El carácter de inicio de texto (STX) marcaba el final del encabezado y el inicio de la parte textual de una transmisión. El carácter de fin de texto (ETX) marcaba el final de los datos de un mensaje. Una convención ampliamente utilizada es convertir los dos caracteres que preceden a ETX en una suma de comprobación o CRC para fines de detección de errores. El carácter de fin de bloque de transmisión (ETB) se utilizó para indicar el final de un bloque de datos, donde los datos se dividieron en dichos bloques con fines de transmisión.

El carácter de escape (ESC) tenía la intención de "entrecomillar" el siguiente carácter, si fuera otro carácter de control, lo imprimiría en lugar de realizar la función de control. Casi nunca se usa para este propósito en la actualidad. Se utilizan varios caracteres imprimibles como "caracteres de escape" visibles, según el contexto.

El carácter de sustitución (SUB) estaba destinado a solicitar una traducción del siguiente carácter de un carácter imprimible a otro valor, generalmente configurando el bit 5 en cero. Esto es útil porque algunos medios (como hojas de papel producidas por máquinas de escribir) solo pueden transmitir caracteres imprimibles. Sin embargo, en sistemas MS-DOS con archivos abiertos en modo de texto, "fin de texto" o "fin de archivo" está marcado por este carácter Ctrl-Z, en lugar de Ctrl-C o Ctrl-D, que son comunes en otros sistemas operativos.

El carácter de cancelación (CAN) indicaba que el elemento anterior debía descartarse. El carácter de reconocimiento negativo (NAK) es un indicador definitivo para, por lo general, señalar que la recepción fue un problema y, a menudo, que el elemento actual debe enviarse nuevamente. El carácter de reconocimiento (ACK) normalmente se usa como indicador para indicar que no se detectó ningún problema con el elemento actual.

Cuando un medio de transmisión es semidúplex (es decir, puede transmitir en una sola dirección a la vez), generalmente hay una estación maestra que puede transmitir en cualquier momento y una o más estaciones esclavas que transmiten cuando tienen permiso. Una estación maestra generalmente usa el carácter de consulta (ENQ) para pedirle a una estación esclava que envíe su próximo mensaje. Una estación esclava indica que ha completado su transmisión enviando el carácter de fin de transmisión (EOT).

Los códigos de control de dispositivos (DC1 a DC4) eran originalmente genéricos, para ser implementados según fuera necesario por cada dispositivo. Sin embargo, una necesidad universal en la transmisión de datos es solicitar al remitente que deje de transmitir cuando un receptor no puede aceptar más datos temporalmente. Digital Equipment Corporation inventó una convención que usaba 19 (el carácter de control de dispositivo 3 (DC3), también conocido como control-S o XOFF) para detener la transmisión, y 17 (el carácter de control de dispositivo 1 (DC1), también conocido como control-Q o XON) para iniciar la transmisión. Se ha vuelto tan ampliamente utilizado que la mayoría no se da cuenta de que no es parte del ASCII oficial. Esta técnica, independientemente de cómo se implemente, evita cables adicionales en el cable de datos dedicados únicamente a la gestión de la transmisión, lo que ahorra dinero. Sin embargo, se debe utilizar un protocolo sensato para el uso de tales señales de control de flujo de transmisión, para evitar posibles condiciones de interbloqueo.

El carácter de escape del enlace de datos (DLE) pretendía ser una señal al otro extremo de un enlace de datos de que el siguiente carácter es un carácter de control como STX o ETX. Por ejemplo, un paquete puede estructurarse de la siguiente manera (DLE) <STX> <CARGA ÚTIL> (DLE) <ETX>.

Códigos varios

El código 7 (BEL) tiene como objetivo provocar una señal audible en el terminal receptor.

Muchos de los caracteres de control ASCII se diseñaron para dispositivos de la época que no se ven con frecuencia en la actualidad. Por ejemplo, el código 22, "inactivo síncrono" (SYN), fue enviado originalmente por módems síncronos (que tienen que enviar datos constantemente) cuando no había datos reales para enviar. (Los sistemas modernos generalmente usan un bit de inicio para anunciar el comienzo de una palabra transmitida; esta es una característica de la comunicación asincrónica. Los enlaces de comunicación sincrónica se vieron más a menudo con mainframes, donde por lo general, se ejecutaban a través de líneas arrendadas corporativas para conectar un mainframe a otro mainframe o tal vez a una minicomputadora).

El código 0 (nombre de código ASCII NUL) es un caso especial. En cinta de papel, es el caso cuando no hay agujeros. Es conveniente tratarlo como un carácter de relleno sin otro significado. Dado que la posición de un carácter NUL no tiene perforaciones, se puede reemplazar con cualquier otro carácter en un momento posterior, por lo que normalmente se usaba para reservar espacio, ya sea para corregir errores o para insertar información que estaría disponible en un momento posterior. o en otro lugar. En informática, a menudo se usa para rellenar registros de longitud fija y, más comúnmente, para marcar el final de una cadena.

El código 127 (DEL, también conocido como "rubout") también es un caso especial. Su código de 7 bits es all-bits-on en binario, lo que esencialmente borra una celda de carácter en una cinta de papel cuando se perfora demasiado. La cinta de papel era un medio de almacenamiento común cuando se desarrolló ASCII, con un historial informático que se remonta a los equipos de descifrado de códigos de la Segunda Guerra Mundial en Biuro Szyfrów. La cinta de papel se volvió obsoleta en la década de 1970, por lo que este aspecto inteligente de ASCII rara vez tuvo algún uso después de eso. Algunos sistemas (como los Apple originales) lo convirtieron en un retroceso. Pero debido a que su código está en el rango ocupado por otros caracteres imprimibles, y debido a que no tenía un glifo oficial asignado, muchos proveedores de equipos de computación lo usaron como un carácter imprimible adicional (a menudo un carácter de "caja" totalmente negro útil para borrar texto sobreimprimiendo con tinta).

Las ROM programables que no se pueden borrar se implementan normalmente como conjuntos de elementos fusibles, cada uno de los cuales representa un bit, que solo se puede cambiar de una manera, generalmente de uno a cero. En tales PROM, los caracteres DEL y NUL se pueden usar de la misma manera que se usaron en la cinta perforada: uno para reservar bytes de relleno sin sentido que se pueden escribir más tarde, y el otro para convertir bytes escritos en bytes de relleno sin sentido. Para las PROM que cambian de uno a cero, los roles de NUL y DEL se invierten; además, DEL solo funcionará con caracteres de 7 bits, que rara vez se usan en la actualidad; para contenido de 8 bits, se puede usar el código de carácter 255, comúnmente definido como un carácter de espacio sin separación, en lugar de DEL.

Muchos sistemas de archivos no permiten caracteres de control en los nombres de archivo, ya que pueden tener funciones reservadas.

Notas y referencias

  1. ^ MS-DOS QBasic v1.1 Documentación. Microsoft 1987-1991.
  2. ^ "4.8 Nombre". La versión estándar Unicode 13.0 - Especificación básica (PDF). Unicode, Inc. Archivado (PDF) del original el 2022-10-09.
  3. ^ "Personas del ASCII". Archivado desde el original el 28 de octubre de 2009. Retrieved 2010-10-08.
  4. ^ Formato ASCII para Intercambio de Red. Octubre de 1969. doi:10.17487/RFC0020. RFC 20. Retrieved 2013-11-03. Un antiguo RFC, que explica la estructura y el significado de los caracteres de control en los capítulos 4.1 y 5.2

Contenido relacionado

Instrucción única, datos múltiples

Protocolo de Internet

Representación (gráficos por computadora)

Más resultados...
Tamaño del texto:
Copiar