Caracteres de escape
En informática y telecomunicaciones, un carácter de escape es un carácter que invoca una interpretación alternativa de los siguientes caracteres en una secuencia de caracteres. Un carácter de escape es un caso particular de metacaracteres. Generalmente, el juicio de si algo es un carácter de escape o no, depende del contexto.
En el ámbito de telecomunicaciones, los caracteres de escape se utilizan para indicar que los siguientes caracteres se codifican de manera diferente. Esto se utiliza para alterar el carácter de control que, de lo contrario, el hardware de telecomunicaciones subyacente detectaría y actuaría sobre él. En este contexto, el uso de caracteres de escape se suele denominar entrecomillado, aunque también se le conoce por su nombre en inglés quoting.
Definición
[editar]Un carácter de escape por sí solo puede no tener significado propio, por lo que todas las secuencias de escape son 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 específico, el propósito de un carácter de escape es iniciar secuencias de caracteres (llamadas secuencias de escape), que deben interpretarse de manera diferente a los mismos caracteres que aparecen sin el carácter de escape prefijado.
Entre las funciones de las secuencias de escape se incluyen:
- Codificar una entidad sintáctica, como comandos de dispositivos o datos especiales, que no se pueden representar directamente con el alfabeto.
- Representar caracteres, denominados comillas de caracteres, que no se pueden escribir en el contexto actual o tendrían una interpretación no deseada. En este caso, una secuencia de escape es un dígrafo que consta de un carácter de escape y un carácter "entrecomillado".
Carácter de control
[editar]Generalmente, un carácter de escape no es un caso particular de caracteres de control (dispositivo), ni viceversa. Si definimos los caracteres de control como no gráficos o con un significado especial para un dispositivo de salida (por ejemplo, una impresora o un terminal de texto), cualquier carácter de escape para este dispositivo es un carácter de control. Pero los caracteres de escape utilizados en programación (como la barra inversa, «\») son gráficos, por lo que no son caracteres de control. Por el contrario, la mayoría (pero 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 algunas secuencias de escape que se conocen como caracteres de control. Por ejemplo, la secuencia de escape correspondiente al salto de línea es \n
.
Ejemplos
[editar]JavaScript
[editar]JavaScript usa \
(barra inversa) como carácter de escape para:[1][2]
\'
un comilla\"
dos comillas\\
barra inversa\n
salto de línea\r
retorno de carro\t
tabulador\b
retroceso\f
salto de página\v
tabulador vertical (Internet Explorer 9 y posteriores usan'\v
como'v
en vez de un tabulado vertical ('\x0B
). Si la compatibilidad entre navegadores puede ser un problema, usa\x0B
en vez de\v
.)\0
carácter nulo (U+0000 NULL) (solo si el siguiente carácter es un dígito no decimal; de lo contrario, es una secuencia de escape octal)\xFF
carácter representado por el byte hexadecimal «FF»
Hay que recordar que los escapes \v
y \0
no están permitidos en cadenas JSON.
Código JavaScript de ejemplo:
console.log("Al usar \\n \nSe aplazarán los caracteres después de \\n una fila hacia abajo.")
console.log("Al usar \\t \tSe aplazarán los caracteres después de \\t una tabulación de distancia a la derecha.")
console.log("Al usar \\r \rSe imitará un retorno de carro, lo que significa que se pasará al comienzo de la fila.") // puede usarse para limpiar la pantalla en algunos terminales. Windows usa \r\n en vez de \n solo.
Carácter de escape ASCII
[editar]El carácter de «escape» ASCII (octal: \033
, hexadecimal: \x1B
, o ^[
o, en decimal, 27
) se usa en muchos dispositivos de salida para iniciar una serie de caracteres llamada secuencia de control o secuencia de escape. Por lo general, el carácter de escape se enviaba primero en una secuencia de este tipo para alertar al dispositivo de que los siguientes caracteres debían interpretarse como una secuencia de control en lugar de como caracteres simples, luego seguirían uno o más caracteres para especificar alguna acción detallada, después de lo cual el dispositivo volvería a interpretar los caracteres con normalidad. Por ejemplo, la secuencia de ^[
, seguida de los caracteres imprimibles [2;10H
, haría que un terminal DEC VT102 moviera su cursor a la décima celda de la segunda línea de la pantalla. Esto se desarrolló más tarde para los 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 impresoras de Hewlett Packard .
Una de las primeras referencias 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 generalmente se encuentra en los teclados de PC estándar. Sin embargo, suele estar ausente de los teclados de PDA y otros dispositivos que no están diseñados principalmente para comunicaciones ASCII. La serie DEC VT220 fue uno de los pocos teclados populares que no tenía tecla Esc. En las interfaces de usuario de las décadas de 1970 y 1980, no era raro usar esta tecla como carácter de escape, pero en las computadoras de escritorio modernas, ese uso se abandonó. A veces, la tecla se identificaba con AltMode (para el modo alternativo). Incluso sin una tecla dedicada, el código de carácter de escape podría generarse escribiendo [
mientras se mantiene presionado simultáneamente Ctrl .
Programación y formatos de datos
[editar]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 la barra inversa ( \
) generalmente proporciona dos formas de incluir comillas dobles dentro de una cadena literal, ya sea modificando el significado del carácter de comillas dobles 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 comillas dobles ( \x22
se convierte en "
).
C, C++, Java y Ruby permiten exactamente los mismos dos estilos de escape de barra inversa. El lenguaje PostScript y el formato de texto enriquecido de Microsoft también utilizan escapes de barra inversa. La codificación QP utiliza el signo igual como carácter de escape.
URL y URI usan %-códigos de por ciento para entrecomillar caracteres con un significado especial, como para los caracteres que no son ASCII. El carácter et ( &
) se puede considerar como 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.
Protocolos de comunicación
[editar]El protocolo punto a punto (PPP) usa el octeto 0x7D
( \175
o en ASCII: }
) como carácter de escape. El octeto que sigue inmediatamente debe someterse a una disunción exclusiva de 0x20
antes de pasar a un protocolo de nivel superior. Esto se aplica tanto al propio 0x7D
como al carácter de control 0x7E
(que se usa en PPP para marcar el comienzo y el final de una trama) cuando esos octetos deben transmitirse mediante un protocolo de nivel superior encapsulado por PPP, así como otros octetos negociados, cuando se establece el vínculo. Es decir, cuando un protocolo de nivel superior desea transmitir 0x7D
, se transmite como la secuencia 0x7D 0x5D
y 0x7E
se transmite como 0x7D 0x5E
.
Bourne Shell
[editar]En Bourne Shell (sh), el asterisco ( *
) y el signo de interrogación ( ?
) son caracteres comodín expandidos a través de Glob. Sin un carácter de escape anterior, un *
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 dichos archivos; de lo contrario, *
permanece sin expandirse. Entonces, para referirse a un archivo llamado literalmente «*», se debe indicar al Shell que no lo interprete de esta manera, precediéndolo con una barra invertida ( \
). Esto modifica la interpretación del asterisco ( *
). Por ejemplo:
rm * # eliminar todos los archivos del directorio actual
rm \* # eliminar el archivo llamado *
Símbolo del sistema de Windows
[editar]El intérprete de líneas de comandos de Windows usa un carácter de intercalación ( ^
) para escapar de los caracteres reservados que tienen significados especiales (en particular: &
, |
, (
, )
, <
, >
, ^
).[4] El intérprete de líneas de comandos de DOS, aunque tiene una sintaxis similar, no admite esto.
Por ejemplo, si lo ponemos 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
[editar]En Windows, la barra inversa se usa como separador de ruta; por lo tanto, generalmente no se puede utilizar como carácter de escape. PowerShell usa acento grave[5] ( ` ) en su lugar.
Por ejemplo, el siguiente comando:
PS C:\> echo "`tPrimera línea`nNueva línea"
Primera línea
Nueva línea
Otros
[editar]- La codificación QP, codifica datos de 8 bits en datos de 7 bits de longitudes de línea limitadas, utiliza el signo igual (
=
) como carácter de escape.
Referencias
[editar]- ↑ «JavaScript character escape sequences · Mathias Bynens». Mathiasbynens.be. Consultado el 30 de junio de 2014.
- ↑ «Special Characters (JavaScript)». Msdn.microsoft.com. 20 de junio de 2014. Consultado el 30 de junio de 2014.
- ↑ Bemer, Bob. «How Bob Bemer Invented the ESCAPE Sequence and Key». www.bobbemer.com. Archivado desde el original el 4 de enero de 2018. Consultado el 22 de marzo de 2018.
- ↑ Tim Hill (1998). «The Windows NT Command Shell». MacMillan Technical Publishing. Consultado el 13 de enero de 2010.
- ↑ «about_Escape_Characters». Msdn.microsoft.com. 8 de mayo de 2014. Archivado desde el original el 25 de noviembre de 2016. Consultado el 24 de noviembre de 2016.