En informática y telecomunicaciones , un carácter de control o carácter no imprimible ( NPC ) es un punto de código en un conjunto de caracteres que no representa un carácter o símbolo escrito. Se utilizan como señalización en banda para producir efectos distintos a la adición de un símbolo al texto. Todos los demás caracteres son principalmente caracteres gráficos , también conocidos como caracteres de impresión (o caracteres imprimibles ), excepto quizás los caracteres de " espacio ". En el estándar ASCII hay 33 caracteres de control, [ 1 ] como el código 7, BEL , que puede que te suene familiar .
Historia
Los signos de procedimiento en código Morse son una forma de carácter de control.
En el código Baudot de 1870 se introdujeron caracteres de control : NUL y DEL. El código Murray de 1901 añadió el retorno de carro (CR) y el salto 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 del teletipo .
Algunos caracteres de control también han sido denominados "efectores de formato".
En ASCII

Se definieron bastantes caracteres de control (33 en ASCII, y ECMA-35 añade 32 más). Esto se debía a que los primeros terminales tenían controles mecánicos o eléctricos muy primitivos que hacían que cualquier API de memoria de estado fuera bastante costosa de implementar; por lo tanto, se requería un código diferente para cada función. Todas las entradas en la tabla ASCII debajo del código 32 10 (técnicamente el conjunto de códigos de control C0 ) son caracteres de control, incluidos CR y LF utilizados para separar líneas de texto. El código 127 10 ( DEL ) también es un carácter de control. [ 2 ] [ 3 ]
Los conjuntos ASCII extendidos definidos por ECMA-35 e ISO 8859 añadieron los códigos del 128 10 al 159 10 como caracteres de control. Esto se hizo principalmente para evitar que, al eliminar el bit más significativo , un carácter impreso se convirtiera en un código de control C0. Este segundo conjunto se denomina conjunto C1 .
El conjunto de caracteres EBCDIC de IBM contiene 65 códigos de control, incluidos todos los códigos de control ASCII C0, además de otros códigos que no se incorporaron a Unicode. También se realizaron varios intentos para definir conjuntos alternativos de 32 códigos de control, pero ninguno de ellos se incluyó en Unicode.
Solo un pequeño subconjunto de los caracteres de control sigue utilizándose para algo que se asemeje a su propósito original:
- 0x00 ( null , NUL , \0 , ^@ ), originalmente pensado para ser un carácter ignorado, pero ahora utilizado por muchos lenguajes de programación, incluido C, para marcar el final de una cadena .
- 0x04 ( EOT , ^D ) Carácter de fin de archivo en terminales Unix. [ 4 ]
- 0x07 ( bell , BEL , \a , ^G ), lo que puede provocar que el dispositivo emita una advertencia, como un sonido de campana o pitido, o que la pantalla parpadee.
- 0x08 ( retroceso , BS , \b , ^H ), puede sobrescribir el carácter anterior.
- 0x09 ( tabulación horizontal , HT , \t , ^I ), mueve la posición de impresión a la derecha hasta la siguiente parada de tabulación.
- 0x0A ( salto de línea , LF , \n , ^J ), mueve el cabezal de impresión una línea hacia abajo (y posiblemente hasta el borde izquierdo). Se utiliza como marcador de fin de línea en sistemas tipo Unix.
- 0x0B ( tabulación vertical , VT , \v , ^K ), tabulación vertical.
- 0x0C ( salto de página , FF , \f , ^L ), para hacer que una impresora expulse el papel a la parte superior de la página siguiente, o que un terminal de vídeo borre la pantalla.
- 0x0D ( retorno de carro , CR , \r , ^M ), mueve la posición de impresión al inicio de la línea, permitiendo la sobreimpresión. Se utiliza como marcador de fin de línea en Classic Mac OS , OS-9 , FLEX (y variantes). CP/M -80 y sus derivados, incluidos DOS y Windows , utilizan un par CR+LF .
- 0x1B ( escape , ESC , \e ( solo GCC ), ^[ ). Introduce una secuencia de escape .
- 0x1C ( separador de archivos , FS , ^\ ) ISO/IEC 10538 utiliza este código como "terminador de documento" para indicar el final del texto en un documento. [ 5 ] : 12
- 0x1D ( separador de grupo , GS , ^] ) ISO/IEC 10538 utiliza esto como un código de "terminador de página" para indicar el final del texto en una página. [ 5 ] : 16
Los caracteres de control pueden realizar alguna acción cuando el usuario los introduce, como Ctrl+C ( carácter de fin de texto , ETX) para interrumpir un proceso en ejecución, y Ctrl+Z ( carácter de sustitución , SUB) para finalizar un archivo escrito en Windows. Estos usos suelen tener poco que ver con su definición ASCII. Los sistemas modernos a menudo describen los atajos como si fueran caracteres de control ("pulsa Ctrl+V para pegar"), pero ni siquiera se utiliza el código numérico para implementar esta función.
En Unicode
Estos 65 códigos de control se incorporaron a Unicode . Los "caracteres de control" son U+0000 — U+001F (controles C0), U+007F (borrar) y U+0080 — U+009F (controles C1). Su categoría general es "Cc". Los caracteres de control Cc no tienen nombre en Unicode, sino que se les asignan etiquetas como "<control-001A>". [ 6 ]
Unicode añadió más caracteres (como el carácter no unificador de ancho cero ) que podrían considerarse controles, pero distingue entre estos "caracteres de formato" y los 65 caracteres de control. Estos últimos son de categoría general "Cf" en lugar de "Cc".
Mostrar
Existen diversas técnicas para mostrar caracteres no imprimibles, como se puede ilustrar con el carácter de campana en codificación ASCII :
- Notación de acento circunflejo en ASCII usando la enésima letra del alfabeto: ^G
- Una secuencia de escape , como en los códigos de cadena de caracteres de C / C++ : \a , \007 , \x07 , etc.
- Una abreviatura, generalmente de tres letras mayúsculas: BEL
- Un carácter Unicode del bloque Unicode de Control Pictures que condensa la abreviatura: U+2407 ␇ SÍMBOLO DE CAMPANA
- Representación gráfica según la norma ISO 2047 : U+237E ⍾ SÍMBOLO DE CAMPANA
Cómo se asignan los caracteres de control a los teclados
Los teclados basados en ASCII tienen una tecla etiquetada como " Control ", "Ctrl" o (raramente) "Cntl", que se usa de forma similar a la tecla Mayús, presionándola en combinación con otra tecla de letra o símbolo. En una implementación, la tecla Control genera el código que se encuentra 64 posiciones por debajo del código de la letra (generalmente) mayúscula con la que se presiona (es decir, se resta 0x40 al valor del código ASCII de la letra (generalmente) mayúscula). La otra implementación consiste en tomar el código ASCII producido por la tecla y realizar una operación AND bit a bit con 0x1F, forzando los bits del 5 al 7 a cero. Por ejemplo, al presionar "Control" y la letra "g" (que es 0110 0111 en binario ), se produce el código 7 (CAMPANA, 7 en base diez, o 0000 0111 en binario). El carácter NULL (código 0) se representa con Ctrl-@, donde "@" es el código inmediatamente anterior a "A" en el conjunto de caracteres ASCII. Para mayor comodidad, algunos terminales aceptan Ctrl-Espacio como alias de Ctrl-@. En ambos casos, esto produce uno de los 32 códigos de control ASCII entre 0 y 31. Ninguno de los métodos funciona para producir el carácter DEL debido a su ubicación especial en la tabla y su valor (código 127 10 ); a veces se utiliza Ctrl-? para este carácter. [ 7 ]
Cuando se mantiene pulsada la tecla Control, las teclas de letras generan los mismos caracteres de control, independientemente del estado de las teclas Mayús o Bloq Mayús . En otras palabras, no importa si la tecla hubiera generado una letra mayúscula o minúscula. La interpretación de la tecla Control con las teclas de espacio, caracteres gráficos y dígitos (códigos ASCII del 32 al 63) varía entre sistemas. Algunos sistemas generan el mismo código de carácter que si la tecla Control no estuviera pulsada. Otros sistemas traducen estas teclas a caracteres de control cuando se mantiene pulsada la tecla Control. La interpretación de la tecla Control con teclas no ASCII ("extranjeras") también varía entre sistemas.
Los caracteres de control suelen representarse mediante notación de intercalación, imprimiendo un acento circunflejo (^) seguido del carácter ASCII con un valor igual al carácter de control más 64. Por lo tanto, los caracteres de control generados con teclas de letras se muestran en mayúsculas. Por ejemplo, ^G representa el código 7, que se genera al pulsar la tecla G mientras se mantiene pulsada la tecla de control.
Los teclados también suelen tener algunas teclas individuales que generan códigos de caracteres de control. Por ejemplo, la tecla "Retroceso" suele generar el código 8, "Tab" el código 9, y "Intro" o "Retorno" el código 13 (aunque algunos teclados pueden generar el código 10 para "Intro").
Muchos teclados incluyen teclas que no corresponden a ningún carácter imprimible o de control ASCII, como por ejemplo las flechas de control del cursor y las funciones de procesamiento de texto . Las pulsaciones de teclas asociadas se comunican a los programas informáticos mediante uno de cuatro métodos: apropiación de caracteres de control no utilizados; uso de una codificación distinta de ASCII; uso de secuencias de control de varios caracteres; o uso de un mecanismo adicional ajeno a la generación de caracteres. Los terminales de ordenador básicos suelen utilizar secuencias de control. Los teclados conectados a ordenadores personales independientes fabricados en la década de 1980 suelen utilizar uno (o ambos) de los dos primeros métodos. Los teclados de ordenador modernos generan códigos de escaneo que identifican las teclas físicas específicas que se pulsan; el software del ordenador determina entonces cómo gestionar las teclas pulsadas, incluyendo cualquiera de los cuatro métodos descritos anteriormente.
Propósito del diseño
Los caracteres de control se diseñaron para agruparse en varias categorías: control de impresión y visualización, estructuración de datos, control de transmisión y funciones misceláneas.
Control de impresión y visualización
Los caracteres de control de impresión se utilizaron inicialmente para controlar el mecanismo físico de las impresoras, los primeros dispositivos de salida. Un ejemplo temprano de esta idea fue el uso de figuras (FIGS) y letras (LTRS) en el código Baudot para alternar entre dos páginas de código. Un ejemplo posterior, aunque también temprano, fueron los caracteres de control de carro ASA fuera de banda . Más tarde, los caracteres de control se integraron en el flujo de datos a imprimir. El carácter de retorno de carro (CR), al enviarse a un dispositivo de este tipo, hace que este coloque el carácter en el borde del papel donde comienza la escritura (puede, o no, mover también la posición de impresión a la siguiente línea). El carácter de salto 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, mover también 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 escrituras de izquierda a derecha , como los alfabetos utilizados para las lenguas occidentales, 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 vertical y horizontal (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 o no moverse al inicio 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 copia impresa , esto se usa con mayor frecuencia para que la impresora pueda sobreimprimir caracteres para hacer otros caracteres que normalmente no están disponibles. En las terminales de vídeo y otros dispositivos de salida electrónicos, 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 desplazamiento de entrada y salida (SI y SO) seleccionaban 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 la llegada de los terminales informáticos que no imprimían físicamente en papel y, por lo tanto, ofrecían mayor flexibilidad en cuanto a la ubicación de la pantalla, el borrado, etc., se adaptaron los códigos de control de impresión. Por ejemplo, el salto de página solía borrar la pantalla, ya que no había una nueva página impresa a la que avanzar. Se desarrollaron secuencias de escape más complejas para aprovechar la flexibilidad de los nuevos terminales y, de hecho, de las impresoras más modernas. El concepto de carácter de control siempre había sido algo limitante, y lo era aún más al utilizarse 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, existía, y sigue existiendo, una gran variedad de secuencias estándar entre las que elegir.
Estructuración de datos
Los separadores (Archivo, Grupo, Registro y Unidad: FS, GS, RS y US) se crearon para estructurar datos, generalmente en cinta, con el fin de simular tarjetas perforadas . El fin de medio (EM) advierte que la cinta (u otro medio de grabación) está terminando. Si bien muchos sistemas utilizan CR/LF y TAB para estructurar datos, es posible encontrar los caracteres de control de separador en datos que necesitan estructurarse. Los caracteres de control de separador no están sobrecargados; su único uso general es 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.
Por ejemplo, el separador RS se utiliza en la RFC 7464 (Secuencias de texto JSON) 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 tenían como objetivo estructurar un flujo de datos y gestionar la retransmisión o el fallo controlado, según fuera necesario, ante errores de transmisión.
El carácter de inicio de encabezado (SOH) se utilizaba para marcar una sección sin datos de un flujo de datos: la parte del flujo que contenía direcciones y otros datos de administración. El carácter de inicio de texto (STX) marcaba el final del encabezado y el inicio de la parte textual del flujo. El carácter de fin de texto (ETX) marcaba el final de los datos de un mensaje. Una convención muy utilizada consiste en que los dos caracteres que preceden a ETX sean una suma de verificación o CRC para la detección de errores. El carácter de fin de bloque de transmisión (ETB) se utilizaba para indicar el final de un bloque de datos, cuando los datos se dividían en dichos bloques para su transmisión.
El carácter de escape ( ESC ) tenía como objetivo entrecomillar el siguiente carácter; si se trataba de otro carácter de control, lo imprimía en lugar de ejecutar la función de control. Hoy en día, casi nunca se utiliza para este propósito. Diversos caracteres imprimibles se utilizan como caracteres de escape visibles , según el contexto.
El carácter de sustitución ( SUB ) se utilizaba para solicitar la traducción del siguiente carácter, de un carácter imprimible a otro valor, generalmente estableciendo el bit 5 a cero. Esto resultaba útil porque algunos soportes (como las 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 carácter Ctrl+Z indica el final del texto o del archivo , en lugar de Ctrl+C o Ctrl+D , que son comunes en otros sistemas operativos.
El carácter de cancelación ( CAN ) indica que el elemento anterior debe descartarse. El carácter de acuse de recibo negativo ( NAK ) es un indicador que generalmente señala que hubo un problema de recepción y, a menudo, que el elemento actual debe enviarse nuevamente. El carácter de acuse de recibo ( ACK ) se usa normalmente como un indicador para señalar que no se detectó ningún problema con el elemento actual.
Cuando un medio de transmisión es semidúplex (es decir, solo puede transmitir 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 usa generalmente una estación maestra para solicitar 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 de dispositivo (DC1 a DC4) eran originalmente genéricos y debían implementarse según las necesidades de cada dispositivo. Sin embargo, una necesidad universal en la transmisión de datos es solicitar al emisor que detenga la transmisión cuando el receptor no puede aceptar más datos temporalmente. Digital Equipment Corporation inventó una convención que utilizaba el carácter 19 (el carácter de control de dispositivo 3 ( DC3 ), también conocido como control-S o XOFF ) para detener la transmisión y el carácter 17 (el carácter de control de dispositivo 1 ( DC1 ), también conocido como control-Q o XON ) para iniciarla. Su uso se ha extendido tanto que muchos desconocen que no forma parte del ASCII oficial. Esta técnica, independientemente de su implementación, evita la necesidad de cables adicionales en el cable de datos dedicados exclusivamente a la gestión de la transmisión, lo que supone un ahorro. No obstante, es necesario utilizar un protocolo adecuado para el uso de estas señales de control de flujo de transmisión, a fin de evitar posibles bloqueos.
El carácter de escape de enlace de datos ( DLE ) tenía como objetivo indicar al otro extremo de un enlace de datos que el carácter siguiente 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 varios
El código 7 ( BEL ) tiene como objetivo generar una señal audible en el terminal receptor. [ 8 ]
Muchos de los caracteres de control ASCII fueron diseñados para dispositivos de la época que hoy en día son poco comunes. Por ejemplo, el código 22, "inactivo síncrono" ( SYN ), era enviado originalmente por módems síncronos (que deben enviar datos constantemente) cuando no había datos que enviar. (Los sistemas modernos suelen usar 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 eran más frecuentes en las computadoras centrales, donde generalmente se utilizaban líneas arrendadas corporativas para conectar una computadora central con otra o con una minicomputadora).
El código 0 (nombre de código ASCII NUL ) es un caso especial. En la cinta de papel, se da cuando no hay perforaciones. 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, puede reemplazarse con cualquier otro carácter posteriormente, por lo que se usaba normalmente para reservar espacio, ya sea para corregir errores o para insertar información que estaría disponible más adelante o en otro lugar. En informática, se usa a menudo para rellenar registros de longitud fija ; para marcar el final de una cadena ; y antiguamente para dar a los dispositivos de impresión tiempo suficiente para ejecutar una función de control .
El código 127 ( DEL , también conocido como "borrado") es igualmente un caso especial. Su código de 7 bits está activado en binario, lo que esencialmente borraba una celda de caracteres en una cinta de papel al perforarla en exceso. 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 quedó obsoleta en la década de 1970, por lo que este aspecto de ASCII rara vez se utilizó después de eso. Algunos sistemas (como las computadoras 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 asignado oficialmente, muchos proveedores de equipos informáticos lo usaron como un carácter imprimible adicional (a menudo un carácter de caja negra útil para borrar texto sobreimprimiendo con tinta).
Las ROM programables no borrables suelen implementarse como matrices de elementos fusibles, cada uno de los cuales representa un bit que solo puede cambiar de una dirección, normalmente de uno a cero. En estas PROM, los caracteres DEL y NUL se pueden usar de la misma manera que en las cintas perforadas: uno para reservar bytes de relleno sin significado que se pueden escribir posteriormente, y el otro para convertir los bytes escritos en bytes de relleno sin significado. Para las PROM que cambian de uno a cero, las funciones de NUL y DEL se invierten; además, DEL solo funciona con caracteres de 7 bits, que rara vez se usan hoy en día; para contenido de 8 bits, se puede usar el código de carácter 255, comúnmente definido como un 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.
Véase también
- Teclas de flecha § Teclas HJKL , HJKL como teclas de flecha, utilizadas en el terminal ADM-3A
- Códigos de control C0 y C1 : caracteres de control informático
- Secuencia de escape : Serie de personajes con un significado especial.
- Marcas direccionales implícitas : caracteres de control en texto bidireccional
- Señalización en banda : envío de información de flujo de control en el mismo canal que los datos.
- Carácter de espacio en blanco : carácter de archivo de texto informático que representa un espacio en blanco.
Notas y referencias
- ↑ Norma Nacional Estadounidense para Sistemas de Información — Conjuntos de Caracteres Codificados — Código Estándar Nacional Estadounidense de 7 Bits para Intercambio de Información (ASCII de 7 Bits), ANSI INCITS 4-1986 (R2002) (anteriormente ANSI X3.4-1986 (R1997)) (PDF) . Instituto Nacional Estadounidense de Estándares , Comité Internacional de Estándares de Tecnología de la Información . 26 de marzo de 1986. 4. Especificación del Conjunto de Caracteres Codificados.
- ↑ Formato ASCII para intercambio de red . IETF . 1969-10-01. doi : 10.17487/RFC0020 . RFC 20. Consultado el 2023-04-05 .
- ↑ "5.2 Caracteres de control". Código estándar nacional estadounidense para el intercambio de información | ANSI X3.4-1977 (PDF) . Instituto Nacional de Estándares. 1977. Archivado (PDF) del original el 9 de octubre de 2022.
- ↑ "EOT (Fin de transmisión)" (PDF) . Descripción del componente: Terminal de transmisión de datos IBM 2780 (PDF) . Biblioteca de referencia de sistemas. pág. 31. GA27-3005-3 . Recuperado el 21 de mayo de 2025. El carácter EOT finaliza la transmisión actual y devuelve todos los terminales en el enlace de datos al modo de control .
Cuando lo envía el terminal transmisor, indica que el terminal no tiene nada más que transmitir y está cediendo la línea de comunicaciones. El terminal receptor puede enviar un carácter EOT en lugar de una respuesta normal DLE 0, DLE 1 o NAK. En este caso, el carácter EOT es una señal de aborto que finaliza la transmisión. Cuando se envía en respuesta a una operación de sondeo, el carácter EOT indica que el terminal sondeado no tiene datos que transmitir o no puede continuar la transmisión. Un carácter EOT se reconoce (excepto en la transcodificación de seis bits) solo cuando está precedido inmediatamente por un patrón SYN (SYN SYN EOT PAD), o cuando está precedido inmediatamente por un DLE y seguido por un carácter cuyos primeros cuatro bits deben ser todos bits "1" (carácter PAD) DLE EOT PAD.
- 1 2 ISO/IEC 10538:1991 Tecnología de la información — Funciones de control para la comunicación de texto . 15-09-1991 . Recuperado el 04-04-2026 .
- ↑ "4.8 Nombre". El estándar Unicode versión 13.0 – Especificación principal (PDF) . Unicode, Inc. Archivado (PDF) del original el 9 de octubre de 2022.
- ↑ "Caracteres ASCII" . Archivado del original el 28 de octubre de 2009. Consultado el 8 de octubre de 2010 .
- ↑ Formato ASCII para intercambio de red . IETF . Octubre de 1969. doi : 10.17487/RFC0020 . RFC 20. Consultado el 3 de noviembre de 2013 .Un antiguo RFC que explica la estructura y el significado de los caracteres de control en los capítulos 4.1 y 5.2.
Enlaces externos
- Conjunto ISO IR 1 C0 de ISO 646 (PDF)
- Personajes de control