piapia123
es

Escape y desescape Unicode

Cifrado

Todo se ejecuta en tu navegador: no se sube nada

Entrada
Arrastra un archivo aquí para cargarlo
Resultado

Convierte caracteres no ASCII en secuencias de escape, y de vuelta. Cada forma tiene su sitio: \uXXXX para JavaScript, Java, C# y archivos .properties; \xXX para bytes UTF-8 sin elaborar, tal como se escriben en Python, C y PHP (\xE4\xB8\xAD es un carácter chino); &#xXXXX; para referencias numéricas HTML. Los emoji salen como el par suplente estándar \uD83D\uDE00 en lugar de \u{1F600}, que los archivos Java y .properties no entienden. También se escapan las barras invertidas y los ampersand, para que decodificar sea la inversa exacta de codificar — si no, un \u0041 literal que ya estuviera en tu texto se leería de vuelta como la letra A.

Funciones

  • Ambos sentidos: texto no ASCII y emoji ⇄ secuencias de escape
  • Tres formas: \uXXXX (JS / Java), \xXX (bytes UTF-8) y &#xXXXX; (referencias numéricas HTML)
  • La decodificación reconoce las tres formas a la vez, incluso mezcladas en una misma cadena
  • Emoji escritos como el par suplente estándar, aceptado por archivos Java y .properties
  • Barras invertidas y ampersand escapados para que decode(encode(x)) === x se cumpla exactamente
  • También entiende las notaciones de punto de código \u{1F600} y \U0001F600
  • Los escapes no reconocidos pasan tal cual en lugar de lanzar un error

Cómo se usa

  1. Elige la dirección: codificar o decodificar
  2. Al codificar, elige la forma de escape que necesites
  3. Pega tu contenido — el resultado aparece al instante
  4. Pulsa Copiar para llevarte el resultado

Preguntas frecuentes

¿Por qué un carácter chino ocupa tres bytes en la forma \xXX?
Porque \xXX representa un solo byte, y los caracteres chinos no caben en uno. Primero se codifican como UTF-8: el carácter U+4E2D es E4 B8 AD, escrito \xE4\xB8\xAD. Así es exactamente como se ven los objetos bytes de Python y los literales de cadena de C. La decodificación sigue la misma regla, así que que la ida y vuelta funcione depende de que esos bytes formen UTF-8 válido.
¿Por qué aparecieron \u0026 y \u005C en mi salida?
Para que decodificar sea la inversa exacta de codificar. Tu texto puede contener ya algo como \u0041 o 中, y sin escapar la barra invertida y el ampersand el decodificador los trataría como secuencias de escape reales y produciría el resultado equivocado en silencio. La salida escapada sigue restaurándose bien en todo lo que entienda escapes \u: JavaScript, Java y archivos .properties.
¿Por qué los emoji se convierten en dos escapes \u y no en uno?
U+1F600 está fuera del Plano Multilingüe Básico, así que en UTF-16 hay que escribirlo como el par suplente \uD83D\uDE00. Los archivos Java y .properties solo aceptan esa forma, nunca \u{1F600}, así que la codificación emite pares; la decodificación une los pares contiguos en un solo carácter.
¿Falla la decodificación con un escape roto?
No. Se reconocen las tres formas a la vez, y todo lo no reconocido — un \uD8 a medio escribir, un � fuera de rango o un escape de otro lenguaje como \n — se deja tal cual estaba. El texto real mezcla escapes sin relación todo el tiempo, y fallar toda la entrada te costaría las partes que estaban perfectamente bien.

Herramientas relacionadas