Una secuencia de escape es una combinación de caracteres que tiene un significado diferente a los caracteres literales contenidos en ella; [1] está marcado por uno o más caracteres anteriores (y posiblemente finales). [2]
Ejemplos de
- En C y muchos lenguajes de programación derivados, una secuencia de escape de cadena es una serie de dos o más caracteres, comenzando con una barra invertida
\
. [3]- Tenga en cuenta que en C una barra invertida seguida inmediatamente por una nueva línea no constituye una secuencia de escape, pero empalma las líneas de origen físicas en lógicas en la segunda fase de traducción, mientras que las secuencias de escape de cadena se convierten en la quinta fase de traducción. [4]
- Para representar el carácter de barra invertida en sí,
\\
se puede usar, donde la primera barra invertida indica un escape y la segunda especifica que se está escapando una barra invertida. [5] - Se puede escapar de un personaje de varias formas diferentes. Suponiendo codificación ASCII, las secuencias de escape
\x5c
,\\
,\134
y\x5C
codifican todos el mismo carácter: la barra invertida\
.
- Para dispositivos que responden a secuencias de escape ANSI , la combinación de tres o más caracteres que comienzan con el carácter de "escape" ASCII (código de carácter decimal 27) seguido del carácter de corchete izquierdo
[
(código de carácter decimal 91) define una secuencia de escape.
Secuencias de control
Cuando se dirige, esta serie de caracteres se usa para cambiar el estado de las computadoras y sus dispositivos periféricos conectados , en lugar de mostrarse o imprimirse como lo serían los bytes de datos regulares , estos también se conocen como secuencias de control , lo que refleja su uso en el control de dispositivos , comenzando con el iniciador de secuencia de control - originalmente el "carácter de escape" código ASCII - carácter 27 (decimal) - a menudo escrito "Esc" en las teclas .
Con la introducción de los terminales ANSI, la mayoría de las secuencias de escape comenzaron con los dos caracteres "ESC" y luego "[" o un carácter CSI especialmente asignado con un código 155 (decimal).
No todas las secuencias de control utilizaron un carácter de escape; por ejemplo:
- Secuencias de control de módem utilizadas por módems compatibles con AT / Hayes , [6] [7] y
- Datos Secuencias generales de control de terminal, [8] [9] [10] pero a menudo todavía se llamaban secuencias de escape, y el uso muy común de caracteres especiales "de escape" en los lenguajes de programación y los parámetros de la línea de comandos a menudo usa la "barra invertida" personaje para comenzar la secuencia.
Las secuencias de escape en las comunicaciones se usan comúnmente cuando una computadora y un periférico tienen un solo canal a través del cual enviar información de un lado a otro (por lo que las secuencias de escape son un ejemplo de señalización en banda ). [11] [12] Eran comunes cuando la mayoría de los terminales tontos usaban ASCII con 7 bits de datos para la comunicación y, a veces, se usaban para cambiar a un juego de caracteres diferente para caracteres "extranjeros" o gráficos que de otra manera estarían restringidos por los 128 códigos. disponible en 7 bits de datos. Incluso los terminales relativamente "tontos" respondieron a algunas secuencias de escape, incluidas las impresoras mecánicas originales de teletipos (en las que se basaban los "teletipos de vidrio" o VDU) respondieron a los caracteres 27 y 31 para alternar entre los modos de letras y cifras.
Teclado
Un carácter de escape generalmente se asigna a la tecla Esc en un teclado de computadora y se puede enviar de otras formas que no sean parte de una secuencia de escape. Por ejemplo, la tecla Esc se puede utilizar como carácter de entrada en editores como vi , [13] o para hacer una copia de seguridad de un nivel en un menú en algunas aplicaciones. [14] Los terminales Hewlett Packard HP 2640 tenían una tecla para un modo de "funciones de visualización" que mostraría gráficos para todos los caracteres de control, incluido Esc, para ayudar en la depuración de aplicaciones.
Si se supone que la tecla Esc y otras teclas que envían secuencias de escape son significativas para una aplicación, surge una ambigüedad si se utiliza un terminal de caracteres . Cuando la aplicación recibe el carácter de escape ASCII , no está claro si ese carácter es el resultado de que el usuario presione la tecla Esc o si es el carácter inicial de una secuencia de escape (por ejemplo, el resultado de presionar una tecla de flecha). El método tradicional para resolver la ambigüedad es observar si otro personaje sigue rápidamente o no al personaje de escape. De lo contrario, se supone que no forma parte de una secuencia de escape. Esta heurística puede fallar en algunas circunstancias, especialmente sin las rápidas velocidades de comunicación modernas.
Las secuencias de escape se remontan al menos al código de Baudot de 1874 . [15] [16] [17]
Control de módem
El conjunto de comandos de Hayes , por ejemplo, define una única secuencia de escape, +++ . (Para interpretar +++ , que puede ser parte de los datos, como secuencia de escape, el remitente detiene la comunicación durante un segundo antes y después de +++ ) .Cuando el módem encuentra esto en un flujo de datos, cambia desde su modo normal de funcionamiento, que simplemente envía cualquier carácter al teléfono, a un modo de comando en el que se supone que los siguientes datos forman parte del lenguaje de comando. Puede volver al modo en línea enviando el comando O.
El conjunto de comandos de Hayes es modal , cambiando del modo de comando al modo en línea. [18] [19] Esto no es apropiado en el caso de que los comandos y los datos cambien rápidamente de un lado a otro. Un ejemplo de un lenguaje de control de secuencia de escape no modal es el VT100 , que usaba una serie de comandos precedidos por un introductor de secuencia de control .
Comparación con personajes de control
Un carácter de control es un carácter que, de forma aislada, tiene alguna función de control, como el retorno de carro (CR). Las secuencias de escape, por el contrario, constan de uno o más caracteres de escape que cambian la interpretación de los caracteres siguientes.
Terminales de datos de video ASCII
La terminal VT52 usó comandos de dígrafo simples como escape-A: de forma aislada, "A" simplemente significaba la letra "A", pero como parte de la secuencia de escape "escape-A", tenía un significado diferente. El VT52 también admitía parámetros: no era un lenguaje de control sencillo codificado como sustitución.
El último terminal VT100 implementó el estándar de secuencias de escape ANSI más sofisticado (ahora ECMA-48) para funciones como controlar el movimiento del cursor, el conjunto de caracteres y las mejoras de visualización. La serie Hewlett Packard HP 2640 tenía quizás las secuencias de escape más elaboradas para los modos de bloque y carácter, las teclas de programación y sus etiquetas suaves, los vectores gráficos e incluso el almacenamiento de datos en cinta o archivos de disco.
Usar en DOS y Windows
Una utilidad, ANSI.sys , [20] se puede utilizar para permitir la interpretación de las secuencias de escape de terminal ANSI (ECMA-48) bajo DOS (mediante el uso $e
en el PROMPT de comandos) o en las ventanas de mando en 16 bits de Windows . El auge de las aplicaciones GUI , que escriben directamente en las tarjetas de visualización, ha reducido en gran medida el uso de secuencias de escape en las plataformas de Microsoft, pero aún se pueden usar para crear interfaces de pantalla interactivas de acceso aleatorio basadas en caracteres con las rutinas de bibliotecas basadas en caracteres como como printf sin recurrir a un programa GUI.
Uso en pantallas Linux y Unix
El terminal de texto predeterminado y las ventanas de texto (como el uso de xterm ) responden a las secuencias de escape ANSI.
Citando escape
Descripción general
Cuando se necesita un carácter de escape dentro de la cadena entre comillas / escape, se utilizan dos estrategias dentro de los lenguajes de programación y de scripting:
- delimitador doble (p
'He didn''t do it.'
. ej. ) [21] - secuencia de escape secundaria
Un ejemplo de lo último está en el uso del signo de intercalación ( ^
). Por ejemplo, esta salida "Puede hacerlo mediante Cortar y Pegar" en CMD . (de lo contrario, el ampersand tiene un uso restringido) [22]
echo Puedes hacerlo a través de Cortar ^ y Pegar
En detalle
De hecho, un uso común de las secuencias de escape es eliminar los caracteres de control que se encuentran en un flujo de datos binarios para que no provoquen por error su función de control. En este caso, el carácter de control se reemplaza por un "carácter de escape" definido (que no necesita ser el carácter de escape US-ASCII) y uno o más caracteres; después de salir del contexto donde el carácter de control habría causado una acción, la secuencia es reconocida y reemplazada por el carácter eliminado. [22] Para transmitir el "carácter de escape" en sí, se envían dos copias. [21]
En muchos lenguajes de programación e interfaces de línea de comandos, las secuencias de escape se utilizan en literales de caracteres y literales de cadena , para expresar caracteres que no son imprimibles o que chocan con la sintaxis de caracteres o cadenas. Por ejemplo, es posible que los propios caracteres de control no puedan colocarse en el programa codificado por el programa editor, o pueden tener efectos secundarios no deseados si se escriben en un comando. El carácter de final de cita también es un problema para los programadores que se puede resolver escapándolo. En la mayoría de los contextos, el carácter de escape es la barra invertida (" \ ").
Muestras
Por ejemplo, el carácter de comillas simples podría expresarse como '\''
ya que la escritura '''
no es aceptable.
Muchos lenguajes de programación modernos especifican el carácter de comilla doble ( "
) como delimitador de un literal de cadena. El carácter de escape de barra invertida generalmente proporciona formas de incluir comillas dobles dentro de un literal de cadena, como modificando el significado del carácter de comilla doble incrustado en la cadena ( \"
), o modificando el significado de una secuencia de caracteres, incluido el valor hexadecimal de un carácter de comilla doble ( \x22
). Ambas secuencias codifican una cita doble literal ( "
).
En Perl o Python 2
imprimir "Nancy dijo" ¡Hola mundo ! "a la multitud". ;
produce un error de sintaxis, mientras que:
imprimir "Nancy dijo \" ¡Hola mundo! \ "a la multitud". ; ### ejemplo de \"
produce la salida deseada. Otra alternativa:
print "Nancy dijo \ x22Hello World! \ x22 a la multitud". ; ### ejemplo de \ x22
utiliza "\ x" para indicar que los dos caracteres siguientes son dígitos hexadecimales, siendo "22" el valor ASCII para una cita doble en hexadecimal.
C , C ++ , Java y Ruby permiten exactamente los mismos dos estilos de escape de barra invertida. El lenguaje PostScript y el formato de texto enriquecido de Microsoft también utilizan escapes de barra invertida. La codificación imprimible entre comillas utiliza el signo igual como carácter de escape.
La URL y la URI utilizan codificación porcentual para citar caracteres con un significado especial, como ocurre con los caracteres que no son ASCII.
Otro truco sintáctico similar (y parcialmente superpuesto) es el estriado .
Algunos lenguajes de programación también proporcionan otras formas de representar caracteres especiales en literales, sin requerir un carácter de escape (ver, por ejemplo, colisión de delimitadores ).
Ver también
- Carácter de control
- Personaje de escape
- cadena de formato printf
Referencias
- ^ "Secuencia de escape" .
- ^ "Personajes" . Los tutoriales de Java .
- ^ "Secuencias de escape" .
Las combinaciones de caracteres que constan de una barra invertida
\
seguida de una letra o de una combinación de dígitos se denominan secuencias de escape . - ^ "ISO / IEC 9899: 201x Comité Borrador N1570" (PDF) .
5.1.1.2 Fases de traducción, 2 .: Cada instancia de un carácter de barra invertida (
\
) seguida inmediatamente por un carácter de nueva línea se elimina, empalmando líneas de origen físicas para formar líneas de origen lógicas. [...] - ^ "Secuencias de escape" .
- ^ "Capítulo 5 - Comandos AT" (PDF) .
- ^ "Conjunto de comandos AT y resumen de registros para módulos de módem analógicos" .
- ^ "Terminales de datos generales: discusión de" .
- ^ "¿Qué es una Terminal?" .
- ^ "Datos generales del software de emulación de terminal DG210 DG211" .
- ^ "Secuencia de escape" .
- ^ "Glosario del manual de terminales e impresoras" .
- ^ "Doce útiles" vi "comandos" .
comandos vi […] Presionando la tecla Esc (Escape) es como […]
- ^ "Cinco usos inesperados de la tecla Esc" . PCworld . 2009-10-29.
- ^ "¿Qué es ASCII? The Economist explica" . The Economist . 2013-06-09.
- ^ "Código Baudot y CCITT" .
El código Baudot, inventado en 1870 y patentado en 1874 por J. Baudot es […]
- ^ "Guía para el uso de juegos de caracteres en Europa" .
elementos C0 y C1 de caracteres de control […] un código de 5 bits patentado por Jean-Maurice-Emile Baudot (1845-1903) en 1874
- ^ "Conjunto de comandos básico de Hayes AT" . 2011-02-05.
+++ - "Secuencia de escape": este comando inicia una secuencia de escape para devolver el módem al modo de comando en línea
- ^ "Conceptos básicos de programación del módem" .
Cuando un módem está en modo de comando, el módem puede aceptar comandos de usted
- ^ 17. Comprensión de ANSI.SYS - Edición especial con MS-DOS 6.22 .
- ^ a b "Edición de apóstrofo ('aaa') (Referencia de lenguaje FORTRAN 77)" .
Dentro del campo, dos apóstrofos consecutivos […]
- ^ a b "CMD - Lote - Escapar con Caret" .