Carácter de control - Control character

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 banda para producir efectos distintos de la adición de un símbolo al texto. Todos los demás caracteres son principalmente caracteres de impresión , imprimibles o gráficos , excepto quizás el carácter de " espacio " (consulte caracteres imprimibles ASCII ).

Todas las entradas de 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 utilizan 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 eliminara el bit alto, no cambiara 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 periféricos de IBM.

0x00 0x10
0x00 NUL DLE
0x01 SOL DC1
0x02 STX DC2
0x03 ETX DC3
0x04 EOT DC4
0x05 ENQ NAK
0x06 ACK SYN
0x07 BEL ETB
0x08 BS PUEDEN
0x09 HT EM
0x0A LF SUB
0x0B Vermont ESC
0x0C FF FS
0x0D CR GS
0x0E ASI QUE RS
0x0F SI nosotros
0x7F DEL

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 de Baudot de 1870 : NUL y DEL. El código de Murray de 1901 agregó el retorno de carro (CR) y el salto de línea (LF), y otras versiones del código de Baudot incluyeron otros caracteres de control.

El carácter de la campana (BEL), que sonó una campana para alertar a los operadores, también fue un personaje de control de teletipo temprano .

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

En ASCII

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

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), se utiliza 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 implican la transmisión del número de código en absoluto (en su lugar, el programa capta el hecho de que el usuario está presionando la tecla Ctrl y presionando la tecla marcada con una 'C').

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 de memoria de 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 forma de enviar cientos de instrucciones de dispositivos. Específicamente, usaron el código ASCII 27 (escape), seguido de una serie de caracteres llamada "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 DEC VT-102 mueva 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 uso es grande, especialmente entre las impresoras, donde la tecnología ha avanzado mucho más rápido de lo que cualquier organismo de estándares puede alcanzar.

En Unicode

En Unicode, los "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 en su lugar se les asignan etiquetas como "<control-001A>".

Monitor

Hay una serie de técnicas para mostrar caracteres que no se imprimen, que pueden ilustrarse con el carácter de campana en codificación ASCII :

  • Punto de código : decimal 7, hexadecimal 0x07
  • Una abreviatura, a menudo tres letras mayúsculas: BEL
  • Un carácter especial que condensa la abreviatura: Unicode U + 2407 (␇), "símbolo de campana"
  • Una representación gráfica ISO 2047 : Unicode U + 237E (⍾), "gráfico para campana"
  • Notación de intercalación en ASCII, donde el punto de código 00xxxxx se representa como un intercalado seguido de la letra mayúscula en el punto de código 10xxxxx: ^ G
  • Una secuencia de escape , como en los códigos de cadena de caracteres C / C ++ : \ a , \ 007 , \ x07 , etc.

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

Los teclados basados ​​en ASCII tienen una tecla etiquetada como " Control ", "Ctrl" o (rara vez) "Cntl", que se usa de manera muy similar a una tecla de mayúsculas, y se presiona en combinación con otra letra o tecla de símbolo. En una implementación, la tecla de control genera el código 64 lugares debajo del código para la letra mayúscula (generalmente) con la que se presiona en combinación (es decir, reste 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 Y a nivel de bits con 31, forzando los bits 6 y 7 a cero. Por ejemplo, presionando "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- @, "@" es el código inmediatamente antes de "A" en el juego de caracteres ASCII. Por conveniencia, muchos terminales aceptan Ctrl-Espacio como un alias para 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 está enmascarado a 7 bits es 127.

Cuando la tecla de control se mantiene pulsado, teclas de letras producen los mismos caracteres de control, independientemente del estado del cambio o el bloqueo de mayúsculas teclas. 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 numéricas (códigos ASCII 32 a 63) varían entre sistemas. Algunos producirán el mismo código de carácter que si no se mantuviera presionada la tecla de control. Otros sistemas traducen estas teclas en caracteres de control cuando se mantiene presionada la tecla de control. La interpretación de la clave de control con claves no ASCII ("externas") también varía entre sistemas.

Los caracteres de control a menudo se renderizan 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 mediante teclas de letras se muestran así con mayúsculas forma de la carta. 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 unas pocas teclas únicas que producen códigos de caracteres de control. Por ejemplo, la tecla con la etiqueta "Retroceso" normalmente produce el código 8, el código de "Tab" 9, el código "Intro" o "Retorno" 13 (aunque algunos teclados pueden producir el código 10 para "Intro").

Muchos teclados incluyen teclas que no corresponden a ningún carácter ASCII imprimible o de control, por ejemplo, flechas de control del cursor y funciones de procesamiento de texto . Las pulsaciones de teclas asociadas se comunican a los programas informáticos mediante uno de cuatro métodos: apropiarse de los caracteres de control que de otro modo no se utilizarían; usando alguna codificación que no sea ASCII; el uso de secuencias de control de varios caracteres; o usando un mecanismo adicional fuera de la generación de personajes. Los terminales informáticos "tontos" suelen utilizar secuencias de control. Los teclados conectados a computadoras personales independientes fabricados 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 fueron diseñados para caer en algunos grupos: control de impresión y visualización, estructuración de datos, control de transmisión y misceláneos.

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 dispositivo de salida más antiguo. Una implementación temprana de esta idea fueron los caracteres de control de carro 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 (también puede, o no, 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), dependiendo del dispositivo y su configuración, también mover la posición de impresión al inicio de la siguiente línea (que sería la posición más a la izquierda para los scripts de izquierda a derecha , como los alfabetos usados ​​para Western idiomas y la posición más a la derecha para las 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 parada de 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 o no moverse 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, 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 y otros dispositivos de salida electrónicos, a menudo hay opciones de configuración de software (o hardware) que permitirán un retroceso de destrucción (es decir, una secuencia BS, SP, BS) que borra, o uno no destructivo que no lo hace. Los caracteres de desplazamiento hacia adentro y hacia afuera (SI y SO) seleccionaron conjuntos de caracteres alternativos, fuentes, subrayado u otros modos de impresión. Las secuencias de escape se usaban a menudo para hacer lo mismo.

Con el advenimiento de los terminales de computadora 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 feeds de formularios, por ejemplo, generalmente borran la pantalla, ya que no hay 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 nuevas impresoras. 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) podrían coincidir con la nueva flexibilidad y potencia y se convirtieron en el método estándar. Sin embargo, había, y sigue habiendo, 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á terminando. Si bien muchos sistemas usan CR / LF y TAB para estructurar datos, es posible encontrar los caracteres de control del separador en los datos que deben estructurarse. Los caracteres de control del separador no están sobrecargados; no hay un uso general de ellos excepto para separar datos en grupos estructurados. Sus valores numéricos son contiguos al carácter de espacio, que puede considerarse un miembro del grupo, como separador de palabras.

Control de transmisión

Los caracteres de control de transmisión estaban destinados a estructurar un flujo de datos y gestionar la retransmisión o la falla elegante, según sea necesario, ante los errores de transmisión.

El carácter de inicio de encabezado (SOH) fue 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) marcó el final del encabezado y el inicio de la parte textual de una secuencia. El carácter de fin de texto (ETX) marcó el final de los datos de un mensaje. Una convención ampliamente utilizada es hacer que los dos caracteres que preceden a ETX sean una suma de comprobación o CRC para fines de detección de errores. El carácter de final 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 para fines de transmisión.

El carácter de escape ( ESC ) tenía la intención de "citar" 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 sustituto ( SUB ) estaba destinado a solicitar una traducción del siguiente carácter de un carácter imprimible a otro valor, generalmente estableciendo 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 los sistemas MS-DOS con archivos abiertos en modo texto, el "final del texto" o "final del archivo" se marca con 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 ) señaló que el elemento anterior debe descartarse. El carácter de reconocimiento negativo ( NAK ) es un indicador definido para, por lo general, señalar que la recepción fue un problema y, a menudo, que el elemento actual debería enviarse de nuevo. El carácter de reconocimiento ( ACK ) se usa normalmente como una bandera 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 solo en una 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. El carácter de consulta ( ENQ ) lo utiliza generalmente una estación maestra para pedirle a una estación esclava que envíe su siguiente 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 del dispositivo (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 temporalmente más datos. Digital Equipment Corporation inventó una convención que utilizaba 19 (el carácter de control de dispositivo 3 ( DC3 ), también conocido como control-S o XOFF ) para la transmisión superior "S", 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 forma 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 ) estaba destinado 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 estar estructurado de la siguiente manera ( DLE ) <STX> <PAYLOAD> ( DLE ) <ETX>.

Códigos misceláneos

El código 7 ( BEL ) está destinado a generar una señal audible en el terminal receptor.

Muchos de los caracteres de control ASCII fueron diseñados para dispositivos de la época que no se ven a menudo en la actualidad. Por ejemplo, el código 22, "inactivo sincrónico" ( SYN ), fue enviado originalmente por módems sincrónicos (que tienen que enviar datos constantemente) cuando no había datos reales para enviar. (Los sistemas modernos suelen utilizar un bit de inicio para anunciar el comienzo de una palabra transmitida; esta es una característica de la comunicación asíncrona . Los enlaces de comunicación síncrona se veían con más frecuencia con los mainframes, donde normalmente se ejecutaban a través de líneas arrendadas corporativas para conectar un mainframe a otro mainframe o quizás una minicomputadora).

El código 0 (nombre de código ASCII NUL ) es un caso especial. En la cinta de papel, es el caso cuando no hay agujeros. Es conveniente tratar esto como un carácter de relleno sin ningún otro significado. Dado que la posición de un carácter NUL no tiene agujeros, se puede reemplazar con cualquier otro carácter en un momento posterior, por lo que generalmente 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, se utiliza a menudo 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 "borrado") es también un caso especial. Su código de 7 bits tiene todos los bits en binario, que esencialmente borró una celda de carácter en una cinta de papel cuando se superpuso. La cinta de papel era un medio de almacenamiento común cuando se desarrolló ASCII, con una historia informática 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 se usó después de eso. Algunos sistemas (como el Apple original) 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 asignado oficialmente, muchos proveedores de equipos informáticos lo usaron como un carácter imprimible adicional (a menudo un carácter de "cuadro" completamente negro útil para borrar texto mediante sobreimpresión con tinta).

Las ROM programables no borrables se implementan típicamente como matrices 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 uno a cero, las funciones de NUL y DEL se invierten; además, DEL solo funcionará con caracteres de 7 bits, que rara vez se utilizan hoy en día; para contenido de 8 bits, se puede utilizar el código de carácter 255, comúnmente definido como un carácter de espacio sin rupturas, en lugar de DEL.

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

Ver también

notas y referencias

enlaces externos