Secuencia de escape

Compartir Imprimir Citar
Combinaciones de caracteres con significado posterior

En informática, una secuencia de escape es una combinación de caracteres que tiene un significado diferente a los caracteres literales que contiene; está marcado por uno o más caracteres anteriores (y posiblemente finales).

Ejemplos

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 harían los bytes de datos normales, 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 teclas.

Con la introducción de terminales ANSI, la mayoría de las secuencias de escape comenzaron con los dos caracteres "ESC" luego "[" o un carácter CSI especialmente asignado con un código 155 (decimal).

No todas las secuencias de control usaban un carácter de escape; por ejemplo:

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). 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 conjunto de caracteres diferente para 'extranjero'. o caracteres gráficos que de otro modo estarían restringidos por los 128 códigos disponibles en 7 bits de datos. Incluso relativamente "tonto" Los terminales respondieron a algunas secuencias de escape, incluidas las impresoras de teletipo mecánicas originales (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 el teclado de una computadora y se puede enviar de otras formas que no sean como parte de una secuencia de escape. Por ejemplo, la tecla Esc puede usarse como un carácter de entrada en editores como vi, o para retroceder un nivel en un menú en algunas aplicaciones. Los terminales Hewlett Packard HP 2640 tenían una tecla para "funciones de visualización" modo 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 usa una 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 presionó 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 carácter sigue o no rápidamente al carácter de escape. Si no, se supone que no es 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 Baudot de 1874.

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 un segundo antes y después del +++.) Cuando el módem encuentra esto en un flujo de datos, cambia de su modo de operación normal, que simplemente envía cualquier carácter al teléfono, a un modo de comando en el que se supone que los siguientes datos son 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. Esto no es apropiado en el caso de que los comandos y los datos cambien rápidamente. Un ejemplo de un lenguaje de control de secuencia de escape no modal es el VT100, que usaba una serie de comandos con el prefijo de un Introductor de secuencia de control.

Comparación con caracteres 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 posteriores.

Terminales de datos de vídeo ASCII

El terminal VT52 usaba comandos de dígrafos 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 directo codificado como sustitución.

La última 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 juego 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 bloques y caracteres, teclas de programación y sus etiquetas suaves, vectores gráficos e incluso guardar datos en archivos de cinta o disco.

Usar en DOS y Windows

Se puede usar una utilidad, ANSI.SYS, para habilitar la interpretación de las secuencias de escape del terminal ANSI (ECMA-48) en DOS (usando $e en el comando PROMPT) o en command ventanas en Windows de 16 bits. El auge de las aplicaciones GUI, que escriben directamente en las tarjetas gráficas, 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 biblioteca 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.

Evasión de citas

Resumen

Cuando se necesita un carácter de escape dentro de la cadena entrecomillada/de escape, se utilizan dos estrategias dentro de los lenguajes de programación y secuencias de comandos:

Un ejemplo de esto último es el uso del signo de intercalación (^). P.ej. esto genera "Puede hacerlo a través de Cortar y pegar" en CMD. (de lo contrario, el ampersand tiene un uso restringido)

eco Usted puede hacerlo a través de Cut^

En detalle

Un uso común de las secuencias de escape es, de hecho, eliminar los caracteres de control que se encuentran en un flujo de datos binarios para que no activen su función de control por error. 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 provocado una acción, la secuencia se reconoce y se reemplaza por el carácter eliminado. Para transmitir el "carácter de escape" mismo, se envían dos copias.

En muchos lenguajes de programación e interfaces de línea de comandos, las secuencias de escape se usan en literales de caracteres y literales de cadena, para expresar caracteres que no se pueden imprimir o que chocan con la sintaxis de caracteres o cadenas. Por ejemplo, es posible que no se permita colocar los caracteres de control 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 fin de comillas 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 comilla simple podría expresarse como ''' desde que se escribe ''&# 39; no es aceptable.

Muchos lenguajes de programación modernos especifican el carácter de comillas dobles (") como delimitador para una cadena literal. 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 que incluye el valor hexadecimal de un carácter de comillas dobles (x22). Ambas secuencias codifican una comilla doble literal (").

En Perl o Python 2

impresión "Nancy dijo "Hola. Mundo!"a la multitud".;

produce un error de sintaxis, mientras que:

impresión "Nancy dijo "Hola Mundo!" a la multitud."; #### ejemplo de "

produce la salida deseada. Otra alternativa:

impresión "Nancy dijo x22Hello World!x22 a la multitud."; ### Ejemplo de x22

usa "x" para indicar que los siguientes dos caracteres son dígitos hexadecimales, "22" siendo el valor ASCII para una comilla 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 entre comillas imprimible utiliza el signo igual como carácter de escape.

URL y URI usan codificación porcentual para citar caracteres con un significado especial, como para los caracteres que no son ASCII.

Otro truco sintáctico similar (y parcialmente superpuesto) es stropping.

Algunos lenguajes de programación también brindan otras formas de representar caracteres especiales en literales, sin requerir un carácter de escape (consulte, por ejemplo, colisión de delimitadores).