En informática y telecomunicaciones , un carácter de escape es un carácter (más específicamente un metacaracter ) que, según una convención contextual, especifica una interpretación alternativa de la secuencia de caracteres que le sigue. El carácter de escape junto con los caracteres que le siguen para formar una unidad sintáctica se denomina secuencia de escape . Una convención puede definir cualquier código de carácter particular como prefijo de secuencia. Algunas convenciones utilizan un carácter normal e imprimible, como la barra invertida ( \) o el signo de ampersand ( &). Otras utilizan un carácter no imprimible (también llamado carácter de control), como el escape ASCII .
En telecomunicaciones, un carácter de escape se utiliza para indicar que los caracteres siguientes se codifican de forma diferente. Esto se usa para modificar caracteres de control que, de otro modo, serían detectados y procesados por el hardware de telecomunicaciones subyacente, como los caracteres no válidos . En este contexto, el uso de un carácter de escape a veces se denomina comillas .
Definición
Un carácter de escape puede no tener un significado propio, por lo que todas las secuencias de escape constan de dos o más caracteres.
Los caracteres de escape forman parte de la sintaxis de muchos lenguajes de programación, formatos de datos y protocolos de comunicación. Para un alfabeto dado , la función de un carácter de escape es iniciar secuencias de caracteres (denominadas secuencias de escape ), las cuales deben interpretarse de manera diferente a los mismos caracteres que aparecen sin el carácter de escape inicial.
Las funciones de las secuencias de escape incluyen:
- Para codificar una entidad sintáctica, como comandos de dispositivos o datos especiales, que no pueden representarse directamente mediante el alfabeto.
- Para representar caracteres, denominados comillas de caracteres , que no se pueden escribir en el contexto actual o que tendrían una interpretación no deseada. En este caso, una secuencia de escape es un dígrafo que consta del carácter de escape y un carácter entre comillas.
Personaje de control
A diferencia de un carácter de escape, un carácter de control (como el retorno de carro ) tiene significado por sí mismo, sin prefijo ni caracteres posteriores. Un carácter de escape no tiene significado por sí solo; solo lo tiene en el contexto de una secuencia.
En general, un carácter de escape no es un caso particular de caracteres de control (de un dispositivo), ni viceversa. Si definimos los caracteres de control como no gráficos o como aquellos que tienen un significado especial para un dispositivo de salida (por ejemplo, una impresora o un terminal de texto ), entonces cualquier carácter de escape para dicho dispositivo es un carácter de control. Sin embargo, los caracteres de escape utilizados en programación (como la barra invertida , \) son gráficos y, por lo tanto, no son caracteres de control. En cambio, la mayoría (aunque no todos) de los "caracteres de control" ASCII tienen alguna función de control de forma aislada, por lo que no son caracteres de escape.
En muchos lenguajes de programación, un carácter de escape también forma secuencias de escape que se denominan caracteres de control. Por ejemplo, el salto de línea tiene una secuencia de escape de \n.
Ejemplos
JavaScript
JavaScript utiliza la \barra invertida (\) como carácter de escape para: [ 1 ] [ 2 ]
\'cita única\"comillas dobles\\barra invertida\nnueva línea\rretorno de carro\tpestaña\bretroceso\fFuente de formulario\vpestaña vertical ( Internet Explorer 9 y versiones anteriores lo tratan\vcomoven lugar de una pestaña vertical (\x0B). Si la compatibilidad entre navegadores es una preocupación, utilice\x0Ben lugar de\v.)\0carácter nulo ( U+0000 <control-0000>) (solo si el siguiente carácter no es un dígito decimal; de lo contrario, es una secuencia de escape octal)\xFFcarácter representado por el byte hexadecimalFF
Los caracteres de escape \v"and" \0no están permitidos en las cadenas JSON.
Código de ejemplo:
console.log ( " Usar \\n \ndesplazará los caracteres después de \\n una fila hacia abajo" ) console.log ( " Usar \\t \tdesplazará los caracteres después de \\t una longitud de tabulación a la derecha" ) console.log ( " Usar \\ r \rimulará un retorno de carro, lo que significa desplazarse al inicio de la fila" ) // Se puede usar para borrar la pantalla en algunas terminales. Windows usa \r\n en lugar de solo \nVarios otros lenguajes de programación utilizan una lista similar.
carácter de escape ASCII
El carácter de escape ASCII ( octal : \033, hexadecimal : \x1B, o, en decimal, 27, también representado por las secuencias ^[o \e) se utiliza en muchos dispositivos de salida para iniciar una serie de caracteres llamada secuencia de control o secuencia de escape. Normalmente, el carácter de escape se enviaba primero en dicha secuencia para alertar al dispositivo de que los caracteres siguientes debían interpretarse como una secuencia de control en lugar de como caracteres normales, luego uno o más caracteres seguirían para especificar alguna acción detallada, después de lo cual el dispositivo volvería a interpretar los caracteres normalmente. Por ejemplo, la secuencia de ^[, seguida de los caracteres imprimibles [2;10H, haría que un terminal VT102 de Digital Equipment Corporation (DEC) moviera su cursor a la celda 10 de la línea 2 de la pantalla. Esto se desarrolló posteriormente en códigos de escape ANSI cubiertos por el estándar ANSI X3.64. El carácter de escape también inicia cada secuencia de comandos en el lenguaje de comandos de impresora Hewlett-Packard .
Una referencia temprana al término "carácter de escape" se encuentra en las publicaciones técnicas de IBM de Bob Bemer , a quien se le atribuye la invención de este mecanismo durante su trabajo en el conjunto de caracteres ASCII . [ 3 ]
La tecla Escape se encuentra generalmente en los teclados de PC estándar. Sin embargo, suele estar ausente en los teclados de PDA y otros dispositivos no diseñados principalmente para comunicaciones ASCII. La serie DEC VT220 fue uno de los pocos teclados populares que no tenía una tecla Esc dedicada, sino que utilizaba una de las teclas situadas encima del teclado principal. En las interfaces de usuario de los años 70 y 80, no era raro usar esta tecla como carácter de escape, pero en los ordenadores de escritorio modernos, dicho uso se ha abandonado. A veces, la tecla se identificaba con AltMode (para modo alternativo). Incluso sin una tecla dedicada, el código del carácter de escape podía generarse escribiendo [mientras se mantenía pulsada la tecla Ctrl.
Formatos de programación y datos
Muchos lenguajes de programación modernos especifican el carácter de comilla doble ( ") como delimitador para un literal de cadena . El carácter de escape de barra invertida ( \) generalmente proporciona dos maneras de incluir comillas dobles dentro de un literal de cadena, ya sea modificando el significado del carácter de comilla doble incrustado en la cadena ( \"se convierte en "), o modificando el significado de una secuencia de caracteres que incluye el valor hexadecimal de un carácter de comilla doble ( \x22se convierte en "). Algunos lenguajes como Pascal y Python permiten el carácter de comilla simple ( ') como delimitador de literales de cadena.
C , C++ , Java y Ruby permiten exactamente los mismos dos estilos de escape con barra invertida. El lenguaje PostScript y el formato de texto enriquecido de Microsoft también utilizan escapes con barra invertida. La codificación quoted-printable utiliza el signo igual como carácter de escape.
Las URL y URI utilizan caracteres de escape % para entrecomillar caracteres con un significado especial, como los caracteres no ASCII. El carácter ampersand (& ) puede considerarse un carácter de escape en SGML y formatos derivados como HTML y XML .&
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, la colisión de delimitadores ).
protocolos de comunicación
El Protocolo Punto a Punto (PPP) utiliza el 0x7Docteto ( \175, o ASCII: }) como carácter de escape. El octeto que le sigue inmediatamente debe ser sometido a una operación XOR con 0x20antes de ser pasado a un protocolo de nivel superior. Esto se aplica tanto a 0x7Dsí mismo como al carácter de control 0x7E(que se utiliza en PPP para marcar el principio y el final de una trama) cuando esos octetos deben ser transmitidos por un protocolo de nivel superior encapsulado por PPP, así como otros octetos negociados cuando se establece el enlace. Es decir, cuando un protocolo de nivel superior desea transmitir 0x7D, se transmite como la secuencia 0x7D 0x5D, y 0x7Ese transmite como 0x7D 0x5E.
Bourne shell
En Bourne shell (sh), los caracteres asterisco ( *) y signo de interrogación ( ?) son caracteres comodín que se expanden mediante globbing . Sin un carácter de escape precedente, se *expandirá a los nombres de todos los archivos en el directorio de trabajo que no comiencen con un punto si y solo si existen tales archivos; de lo contrario, *permanece sin expandir. Por lo tanto, para referirse a un archivo llamado literalmente "*", se debe indicar al shell que no lo interprete de esta manera, anteponiéndole una barra invertida ( \). Esto modifica la interpretación del asterisco ( *).
Comparar:
De manera similar, caracteres como el signo de ampersand , la barra vertical y el punto y coma (utilizados para encadenar comandos), los corchetes angulares (utilizados para la redirección ) y los paréntesis tienen un significado sintáctico especial para el intérprete de comandos Bourne. Estos también deben escaparse —lo que se denomina "entrecomillar" en la sh(1)página del manual [ 4 ] — para poder utilizarse literalmente como argumentos de otro programa:
$ echo (`-´ ) > # no se ha escapado ni entrecomillado bash: error de sintaxis cerca del token inesperado ``-´'$ echo \(`-´ \)\> # escapado con barras invertidas (`-´) >$ echo '(`-´)>' # protegido por comillas simples; mismo efecto que arriba (`-´) >$ echo ; ) # error de sintaxis $ echo ';)' \;\) # ambos OKSímbolo del sistema de Windows
El intérprete de línea de comandos de Windows utiliza un carácter de circunflejo^ ( ) para escapar caracteres reservados que tienen significados especiales (en particular: &, |, (, ), <, >, ^). [ 5 ] El intérprete de línea de comandos de DOS , aunque tiene una sintaxis similar, no admite esto.
Por ejemplo, en el símbolo del sistema de Windows, esto dará como resultado un error de sintaxis.
C:\> echo < hola mundo> La sintaxis del comando es incorrecta.mientras que esto generará la cadena:<hello world>
C:\> echo ^< hola mundo ^> <hola mundo>Windows PowerShell
En Windows , la barra invertida se usa como separador de ruta; por lo tanto, generalmente no se puede usar como carácter de escape. PowerShell usa la comilla invertida [ 6 ] ( ` ) en su lugar.
Por ejemplo, el siguiente comando:
PS C:\> echo " `t Primera línea `n Nueva línea" Primera línea Nueva líneaOtros
- Quoted-printable , que codifica datos de 8 bits en datos de 7 bits de longitud de línea limitada, utiliza el signo igual (
=) como carácter de escape.
Resumen
Estos caracteres se mencionan como caracteres de escape o delimitadores literales de cadena.
\x1Bcarácter de escape ASCII"\x22delimitador literal de cadena%\x25Codificación porcentual&\x26SGML, HTML y XML'\x27delimitador literal de cadena=\x3DCitado-imprimible\\x5CMuchos lenguajes de programación`\x60Windows PowerShell}\x7DProtocolo punto a punto
- y ocurren más para este propósito, como
$,#,*,+,;,<,>,?,@y~
Véase también
- Tecla AltGr : tecla modificadora en algunos teclados de ordenador.
- Secuencias de escape en C : secuencias de caracteres especiales en el lenguaje de programación C.
- Síndrome del palillo inclinado : caracteres de escape que hacen ilegible una expresión
- Cita anidada : citas dentro de otras citas.
- Storpping (sintaxis) – Método en el diseño de lenguajes de programación
Referencias
- ↑ "Secuencias de escape de caracteres de JavaScript" . Mathias Bynens. 21 de diciembre de 2011. Consultado el 30 de junio de 2014 .
- ↑ "Caracteres especiales (JavaScript)" . Red de desarrolladores de Microsoft. Archivado del original el 14 de diciembre de 2014. Consultado el 30 de junio de 2014 .
- ↑ Bemer, Bob (25 de octubre de 2003). "Cómo Bob Bemer inventó la secuencia y la clave ESCAPE" . Bob Bemer . Archivado del original el 4 de enero de 2018. Consultado el 22 de marzo de 2018 .
- ↑ "Página del manual - sh(1)" .
- ↑ Tim Hill (1998). "El intérprete de comandos de Windows NT" . Microsoft Learn . MacMillan Technical Publishing . Consultado el 13 de enero de 2010 .
- ↑ "about_Escape_Characters" . Microsoft Developer Network. 8 de mayo de 2014. Archivado del original el 25 de noviembre de 2016. Consultado el 24 de noviembre de 2016 .
Enlaces externos
- El poderoso personaje de ESCAPE: clave y secuencias archivadas el 25/03/2016 en Wayback Machine – Bob Bemer
Este artículo incorpora material de dominio público de la Norma Federal 1037C . Administración de Servicios Generales . Archivado del original el 22 de enero de 2022.
- Coincidencia de patrones
- Personajes de control