stringtranslate.com

Secuencia de escape

En informática , una secuencia de escape es una combinación de caracteres que tiene un significado distinto a los caracteres literales contenidos en ella; [1] está marcado por uno o más caracteres anteriores (y posiblemente finales). [2]

Ejemplos

Secuencias de control

Cuando se dirige, esta serie de caracteres se utiliza 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 código ASCII de "carácter de escape", 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 comenzaban 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:

Las secuencias de escape en las comunicaciones se utilizan 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 dentro de 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 conjunto de caracteres diferente para caracteres gráficos o "extranjeros" que de otro modo 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 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 letras y figuras.

Teclado

Por lo general, se asigna un carácter de escape a la tecla Esc en el teclado de una computadora y se puede enviar de otras maneras además de como 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 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 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 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 velocidades de comunicación modernas y rápidas.

Las secuencias de fuga se remontan al menos al código 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 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 y cambia del modo de comando al modo en línea. [18] [19] Esto no es apropiado en el caso en que los comandos y 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 utilizaba 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 personajes de escape que cambian la interpretación de los personajes siguientes.

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 sencillo codificado como sustitución.

El terminal VT100 posterior 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 modos de bloque y carácter, teclas de programación y sus etiquetas suaves, vectores gráficos e incluso guardar datos en archivos de cinta o disco.

Uso en DOS y Windows

Se puede utilizar una utilidad, ANSI.SYS , [20] para permitir la interpretación de las secuencias de escape del terminal ANSI (ECMA-48) en DOS (usando $eel comando PROMPT ) o en ventanas de comandos en Windows de 16 bits . El auge de las aplicaciones GUI , que escriben directamente en tarjetas de visualización, ha reducido en gran medida el uso de secuencias de escape en las plataformas de Microsoft, pero aún pueden usarse para crear interfaces de pantalla interactivas basadas en caracteres de acceso aleatorio con 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 secuencias de escape ANSI.

citando escape

Descripción general

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

Un ejemplo de esto último es el uso del signo de intercalación ( ^). Por ejemplo, esto genera "Puede hacerlo mediante Cortar y Pegar" en CMD . (de lo contrario, el signo comercial tiene un uso restringido) [22]

echo Puedes hacerlo mediante Cortar^&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 causen 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 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 se pueden imprimir o que chocan con la sintaxis de caracteres o cadenas. Por ejemplo, es posible que no se permita colocar caracteres de control en el programa codificado por el programa editor, o que tengan efectos secundarios indeseables si se escriben en un comando. El carácter de fin de comilla también es un problema para los programadores que se puede resolver escapando de él. 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 '\''si la escritura '''no fuera aceptable.

Muchos lenguajes de programación modernos especifican el carácter de comillas dobles ( ") como delimitador de una cadena literal. El carácter de escape de barra invertida generalmente proporciona formas de incluir comillas dobles dentro de una cadena literal, como modificando el significado del carácter de comillas dobles 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

imprimir "Nancy dijo" ¡Hola mundo ! "a la multitud." ;  

produce un error de sintaxis, mientras que:

print "Nancy dijo \"¡Hola mundo!\" a la multitud." ; ### ejemplo de \"  

produce el resultado previsto. Otra alternativa:

print "Nancy dijo \x22¡Hola mundo!\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 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 barras invertidas. La codificación imprimible entre comillas utiliza el signo igual como carácter de escape.

URL y 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 stropping .

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

Referencias

  1. ^ "Secuencia de escape".
  2. ^ "Personajes". Los tutoriales de Java .
  3. ^ "Secuencias de escape". Las combinaciones de caracteres que consisten en una barra invertida seguida de una letra o de una combinación de dígitos se denominan secuencias de escape .\
  4. ^ "Borrador N1570 del Comité ISO/IEC 9899:201x" (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, uniendo las líneas de origen físicas para formar líneas de origen lógicas. [...]\
  5. ^ "Secuencias de escape". IBM .
  6. ^ "Capítulo 5: Comandos AT" (PDF) .
  7. ^ "Resumen de registro y conjunto de comandos AT para módulos de módem analógico".
  8. ^ "Terminales generales de datos: discusión de".
  9. ^ "¿Qué es una terminal?".
  10. ^ "Software de emulación de terminal Data General DG210 DG211".
  11. ^ "Secuencia de escape".
  12. ^ "Glosario del manual de terminales e impresoras".
  13. ^ "Doce comandos" vi "útiles". Comandos vi […] Pulsando la tecla Esc (Escape) es como […]
  14. ^ "Cinco usos inesperados de la tecla Esc". Mundo PC . 2009-10-29.
  15. ^ "¿Qué es ASCII? Explica The Economist". El economista . 2013-06-09.
  16. ^ "Código Baudot y CCITT". El código Baudot, inventado en 1870 y patentado en 1874 por J. Baudot es […]
  17. ^ "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
  18. ^ "Conjunto de comandos AT básico de Hayes". 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
  19. ^ "Conceptos básicos de programación del módem". Cuando un módem está en modo de comando, el módem puede aceptar sus comandos
  20. ^ 17. Comprensión de ANSI.SYS - Edición especial con MS-DOS 6.22.
  21. ^ ab "Edición de apóstrofo ('aaa') (referencia del idioma FORTRAN 77)". Dentro del campo, dos apóstrofes consecutivos […]
  22. ^ ab "CMD - Lote - Escapar con Caret".