Escapar / desescapar Unicode
Convierte cualquier texto, acentos o emojis en secuencias de escape para JavaScript, JSON, Java, Python, C, HTML o CSS, o pega texto escapado para decodificarlo de nuevo a caracteres legibles. Todos los estilos de escape se detectan automáticamente y el resultado se actualiza mientras escribes.
Última actualización:
Desglose de caracteres
| Carácter | Punto de código | Bytes UTF-8 | UTF-16 | HTML | Escapar | Cantidad |
|---|
Cómo usar Escapar / desescapar Unicode
- Elige un modo: Escapar convierte el texto en secuencias de escape; Desescapar convierte las secuencias de escape de nuevo en texto.
- Elige el estilo de escape para tu lenguaje, por ejemplo \uXXXX para JavaScript, JSON y Java, o &#x; para HTML.
- Escribe o pega en el cuadro de entrada. El resultado se actualiza al instante.
- Elige qué caracteres escapar: solo los no ASCII (mantiene el código legible) o todos los caracteres.
- Copia o descarga el resultado, o pulsa Intercambiar para enviarlo de vuelta a la entrada e invertir la conversión.
- Revisa la tabla de desglose para ver el punto de código y los bytes de cada carácter.
Sintaxis de escape Unicode por lenguaje
El mismo carácter se escribe de forma distinta en cada lenguaje. Esta tabla muestra el signo del euro € (U+20AC) y la cara sonriente 😀 (U+1F600), que está fuera del plano multilingüe básico:
| Lenguaje / formato | € (U+20AC) | 😀 (U+1F600) | Notas |
|---|---|---|---|
| JavaScript, JSON, Java, C# | € | 😀 | Unidades de código UTF-16; los caracteres astrales necesitan un par sustituto |
| JavaScript ES6, Swift, Rust, PHP 7+, Ruby | \u{20AC} | \u{1F600} | De 1 a 6 dígitos hexadecimales entre llaves (Swift y Rust: hasta 8 / 6) |
| Python, C, C++ | € | \U0001F600 | Python también escribe de U+0000 a U+00FF como \xHH |
Bytes UTF-8 (C, PHP, shell printf, bytes de Python) | \xE2\x82\xAC | \xF0\x9F\x98\x80 | Un escape por cada byte de la codificación UTF-8 |
| Perl | \x{20AC} | \x{1F600} | También \N{U+20AC} |
| HTML / XML | € o € | 😀 o 😀 | Referencia numérica de carácter hexadecimal o decimal; también existe la entidad con nombre € |
| CSS | \20AC | \1F600 | Hasta 6 dígitos hexadecimales; un espacio a continuación termina el escape |
| Notación Unicode | U+20AC | U+1F600 | Se usa en documentación, no en código |
Cómo se calculan los pares sustitutos
UTF-16 solo puede guardar 65,536 valores en una unidad, así que los puntos de código de U+10000 a U+10FFFF se dividen en dos. Resta 0x10000 al punto de código y luego:
- Sustituto alto = 0xD800 + (valor ÷ 0x400, redondeado hacia abajo)
- Sustituto bajo = 0xDC00 + (valor mod 0x400)
Para 😀: 0x1F600 − 0x10000 = 0xF600. 0xF600 ÷ 0x400 = 0x3D, así que el sustituto alto es 0xD83D; 0xF600 mod 0x400 = 0x200, así que el sustituto bajo es 0xDE00. Eso da 😀. Una mitad suelta de un par es texto no válido, por eso la herramienta avisa de los sustitutos sin pareja.
Consejos
- Usa Solo no ASCII para dejar un archivo fuente en ASCII puro sin perder legibilidad, por ejemplo en los archivos
.propertiesde Java, que tradicionalmente necesitaban\uXXXXpara todo lo que estuviera fuera de Latin-1. - Los emojis con tonos de piel, las banderas y los emojis de familia son varios puntos de código unidos (por ejemplo, 👍🏽 es U+1F44D más el modificador U+1F3FD). La tabla de desglose muestra cada parte.
- Si el texto decodificado se ve como
éen lugar de é, en algún punto se leyeron bytes UTF-8 como Latin-1. Escapa el texto corrupto con el estilo UTF-8 para inspeccionar los bytes.
Preguntas frecuentes
¿Qué es una secuencia de escape Unicode?
Es una forma de escribir un carácter usando solo ASCII simple, indicando su punto de código en hexadecimal. Por ejemplo, el signo del euro € es U+20AC, que se escribe \u20AC en JavaScript, JSON y Java, € en HTML y \20AC en CSS. Los escapes son útiles cuando un archivo, una terminal o una base de datos no pueden guardar el carácter directamente.
¿Por qué un emoji se escribe con dos escapes \u?
JavaScript, JSON y Java guardan las cadenas en UTF-16, así que los caracteres por encima de U+FFFF se dividen en un par sustituto. 😀 (U+1F600) se convierte en \uD83D\uDE00. JavaScript ES6 también acepta \u{1F600}, Python usa \U0001F600, y HTML y CSS usan directamente el punto de código completo.
¿Cuál es la diferencia entre \u00E9 y \xC3\xA9?
\u00E9 identifica el carácter é por su punto de código U+00E9. \xC3\xA9 enumera los dos bytes de su codificación UTF-8, que es lo que ves en las cadenas de bytes de Python, PHP, C y en los archivos de registro. Esta herramienta decodifica las series de bytes \x como UTF-8 cuando forman UTF-8 válido y, si no, como caracteres Latin-1 individuales, así que ambas formas dan é.
¿Cómo desescapo cadenas \u en JavaScript o Python?
En JavaScript, JSON.parse('"' + s + '"') decodifica los escapes \uXXXX en una cadena JSON válida. En Python, s.encode('latin-1', 'backslashreplace').decode('unicode_escape') o codecs.decode(s, 'unicode_escape') funcionan con entradas ASCII. Esta página hace lo mismo sin código y además maneja entidades HTML y estilos mezclados.
¿Escapar cambia el texto?
No. Un escape es solo otra forma de escribir el mismo carácter. Cuando el programa lee la cadena, \u0041 y A son idénticos. Escapar solo los caracteres no ASCII mantiene tu código legible y deja el archivo en ASCII puro.
¿Cómo se escriben los escapes CSS?
CSS usa una barra invertida seguida de 1 a 6 dígitos hexadecimales, por ejemplo content: "\2713" para ✓. Si el carácter siguiente pudiera leerse como dígito hexadecimal, un espacio termina el escape, por eso esta herramienta siempre añade un espacio después de un escape CSS. El analizador consume ese espacio y no aparece en el resultado.
¿Mi texto se envía a un servidor?
No. La conversión se ejecuta por completo en JavaScript en tu navegador. No se sube ni se guarda nada, así que puedes trabajar con seguridad con cadenas privadas, claves o datos de registro.
¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?
Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.