Secuencia de escape

Combinaciones de caracteres con significado ulterior

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

Ejemplos

  • En C y muchos lenguajes de programación derivados, una secuencia de escape de cadena es una serie de dos o más caracteres, que comienza 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, sino que une las líneas de origen físicas en líneas lógicas en la segunda fase de traducción, mientras que las secuencias de escape de cadenas se convierten en la quinta fase de traducción. [4]
    • Para representar el carácter de barra invertida en sí, \\se puede utilizar, donde la primera barra invertida indica un escape y la segunda especifica que se está escapando una barra invertida. [5]
    • Un carácter puede escaparse de varias formas diferentes. Suponiendo que se utiliza codificación ASCII, las secuencias de escape \x5c( hexadecimal ) \\, y \134( octal ) codifican todas el mismo carácter: la barra invertida \.
  • Para los 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 por el carácter de corchete izquierdo [(código de carácter decimal 91) define una secuencia de escape.

Secuencias de control

Cuando se indica, 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 serían los bytes de datos regulares; 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 comenzaban con dos caracteres "ESC" y luego "[" o un carácter CSI especialmente asignado con un código 155 (decimal).

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

  • Datos Secuencias de control de terminal general, [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 lenguajes de programación y parámetros de línea de comandos hoy en día a menudo usa el carácter de "barra invertida" para comenzar la secuencia.

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 ida y vuelta (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 conjunto de caracteres diferente para caracteres "extranjeros" o gráficos que de otra manera estarían restringidos por los 128 códigos disponibles en 7 bits de datos. Incluso los terminales relativamente "tontos" respondían a algunas secuencias de escape, incluidas las impresoras de teletipo mecánicas originales (en las que se basaban los "teletipos de vidrio" o VDU) que respondían a los caracteres 27 y 31 para alternar entre los modos de letras y cifras.

Teclado

Un carácter de escape se asigna generalmente a la tecla Esc en un teclado de computadora y puede enviarse de otras maneras que no sean parte de una secuencia de escape. Por ejemplo, la tecla Esc puede usarse como un carácter de entrada en editores como vi , [13] o para retroceder 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 mostraba gráficos para todos los caracteres de control, incluida 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 tienen un significado 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 carácter sigue rápidamente al carácter de escape. Si no es así, 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. [15] [16] [17]

Control de módem

El conjunto de comandos Hayes , por ejemplo, define una única secuencia de escape, +++ . (Para interpretar +++ , que puede ser parte de los datos, como la 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 comandos. 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 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 utilizaba una serie de comandos prefijados por 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, consisten en uno o más caracteres de escape que cambian la interpretación de los caracteres subsiguientes.

Terminales de datos de vídeo ASCII

El terminal VT52 utilizaba comandos digráficos 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 el control del movimiento del cursor, el conjunto de caracteres y las mejoras de la pantalla. 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, programación de teclas y sus etiquetas suaves, vectores gráficos e incluso para 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 de terminal ANSI (ECMA-48) bajo DOS (usándolas $een el 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 Microsoft, pero aún se pueden utilizar para crear interfaces de pantalla interactivas basadas en caracteres de acceso aleatorio con las rutinas de biblioteca basadas en caracteres como printf sin recurrir a un programa GUI.

Uso en pantallas Linux y Unix

La terminal de texto predeterminada y las ventanas de texto (como las que usan xterm ) responden a secuencias de escape ANSI.

Citando escape

Descripción general

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

  • delimitador doble (por ejemplo 'He didn''t do it.') [21]
  • secuencia de escape secundaria

Un ejemplo de esto último es el uso del símbolo de intercalación ( ^). Por ejemplo, esto muestra "Puede hacerlo mediante Cortar y pegar" en CMD . (De lo contrario, el ampersand tiene un uso restringido) [22]

eco Puedes hacerlo mediante Cortar^&Pegar

En detalle

Un uso común de las secuencias de escape es, de hecho, eliminar caracteres de control que se encuentran en un flujo de datos binarios para que no provoquen 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 tiene por qué ser el carácter de escape US-ASCII) y uno o más caracteres adicionales; después de salir del contexto en el que el carácter de control habría provocado una acción, la secuencia se reconoce y se reemplaza 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 entran en conflicto 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 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 " '\''ya que escribir '''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 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:

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

produce el resultado deseado. Otra alternativa:

imprimir "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 escapes de barra invertida. La codificación entre comillas utiliza el signo igual como carácter de escape.

Las URL y URI utilizan codificación de porcentaje para citar caracteres con un significado especial, como en el caso de caracteres no 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 necesidad de un carácter de escape (véase, por ejemplo, colisión de delimitadores ).

Véase también

Referencias

  1. ^ "Secuencia de escape".
  2. ^ "Caracteres". Los tutoriales de Java .
  3. ^ "Secuencias de escape". 3 de agosto de 2021. 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 del Comité N1570 de la norma ISO/IEC 9899:201x" (PDF) . 5.1.1.2 Fases de la traducción, 2.: Se elimina cada instancia de un carácter de barra invertida ( ) seguido inmediatamente por un carácter de nueva línea, 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 conjuntos de comandos AT y registros para módulos de módem analógico".
  8. ^ "Terminales de datos generales: 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 […] Presionando la tecla Esc (Escape) es como […]
  14. ^ "Cinco usos inesperados de la tecla Esc". PCworld . 2009-10-29.
  15. ^ "¿Qué es ASCII? The Economist lo explica". The Economist . 2013-06-09.
  16. ^ "El código Baudot y el CCITT". El código Baudot, inventado en 1870 y patentado en 1874 por J. Baudot, es […]
  17. ^ "Guía para el uso de conjuntos de caracteres en Europa". elementos C0 y C1 de los caracteres de control […] un código de 5 bits patentado por Jean-Maurice-Emile Baudot (1845-1903) en 1874
  18. ^ "Conjunto básico de comandos AT de Hayes". 5 de febrero de 2011. +++ - "Secuencia de escape": este comando inicia una secuencia de escape para que el módem vuelva al modo de comando en línea.
  19. ^ "Conceptos básicos de programación de módem". Cuando un módem está en modo de comando, puede aceptar comandos de su parte.
  20. ^ 17. Comprensión de ANSI.SYS - Edición especial con MS-DOS 6.22.
  21. ^ ab "Edición de apóstrofos ('aaa') (Referencia del lenguaje FORTRAN 77)". Dentro del campo, dos apóstrofos consecutivos […]
  22. ^ ab "El shell de comandos de Windows NT". 20 de febrero de 2014.
Obtenido de "https://es.wikipedia.org/w/index.php?title=Secuencia_de_escape&oldid=1257855534"