Conversor de codificación Unicode
Pega cualquier forma Unicode y léela como texto: escapes \u de JSON, llaves de ES6, puntos de código U+ y bytes UTF-8 se reconocen solos, y obtienes todas las representaciones a la vez. Todo en tu navegador, sin subir nada.
Todo se ejecuta en tu navegador: lo que pegas nunca se sube, ni se registra, ni se guarda.
El resultado aparece aquí Todas las representaciones de una vez
| JavaScript / Java / JSON uXXXX | — | |
|---|---|---|
| ES6 u{XXXXX} | — | |
| Python uXXXX / UXXXXXXXX | — | |
| Go uXXXX / UXXXXXXXX | — | |
| Rust u{XXXXX} | — | |
| Punto de código U+XXXX | — | |
| HTML decimal &#NNNNN; | — | |
| HTML hexadecimal &#xXXXX; | — | |
| Codificado para URL %XX | — | |
| CSS XXXXXX | — | |
| Bytes UTF-8 hex | — | |
| Unidades UTF-16 hex | — | |
| UTF-32 hex | — | |
| Bytes octales NNN | — | |
| Puntos de código decimales NNNNN | — |
Carácter a carácter
| Carácter | Punto de código | UTF-8 | UTF-16 | Escritura | Categoría | Nombre |
|---|---|---|---|---|---|---|
| El resultado aparece aquí | ||||||
Referencia rápida
| Carácter | Punto de código | JavaScript / Java / JSON | Bytes UTF-8 | Codificado para URL | HTML decimal |
|---|---|---|---|---|---|
| 中文 | U+4E2D U+6587 | \u4E2D\u6587 | E4 B8 AD E6 96 87 | %E4%B8%AD%E6%96%87 | 中文 |
| 😀 | U+1F600 | \uD83D\uDE00 | F0 9F 98 80 | %F0%9F%98%80 | 😀 |
| A | U+0041 | A | 41 | A | A |
| ␣ U+3000 | U+3000 | \u3000 | E3 80 80 | %E3%80%80 |   |
Comportamiento verificado contra Node, Python, Java, Go y un motor de navegador real, no deducido de la documentación.
¿Qué es un escape Unicode?
Un escape Unicode escribe un carácter usando solo ASCII, para que sobreviva a los sistemas que no pueden transportar el carácter en sí. El mismo carácter tiene un escape distinto en casi cada lenguaje: JavaScript y JSON usan cuatro dígitos hexadecimales por unidad de código UTF-16, ES6 y Rust meten el punto de código entero entre llaves, Python y Go añaden una forma ancha de ocho dígitos, CSS se queda con una barra invertida a secas y HTML tiene sus propias referencias numéricas y con nombre. Todas describen el mismo punto de código, y por eso una misma cadena puede llegarte con media docena de caras distintas.
中文
U+4E2D U+6587 code point
\u4E2D\u6587 JavaScript / Java / JSON
\u{4E2D}\u{6587} ES6 / Rust
E4 B8 AD E6 96 87 UTF-8
%E4%B8%AD%E6%96%87 URL
中文 HTML Qué hace este conversor
Reconoce la forma por ti
Escapes, llaves, escapes anchos, puntos de código, entidades, codificación porcentual y tiras de bytes se detectan sin cambiar de modo.
Aguanta la entrada mezclada
Solo cambian las partes codificadas. La puntuación de JSON, las rutas de Windows y las barras invertidas ya escapadas se quedan como están.
Todas las representaciones de una vez
Un solo pegado produce la tabla entera, así que nunca conviertes dos veces para pasar de un lenguaje a otro.
Correcto para cada lenguaje
Los caracteres fuera del BMP se escriben con la forma ancha para Python y Go, donde un par sustituto fallaría.
Inspección carácter a carácter
Punto de código, bytes UTF-8 y UTF-16, escritura y categoría de cada carácter, más el nombre Unicode siempre que exista.
Saca a la luz los caracteres invisibles
Las marcas de orden de bytes, los caracteres de unión de ancho cero y los espacios de no separación reciben una marca visible.
Ejemplos
Decodificar una línea de log sin tocar el resto
{"msg":"\u4e2d\u6587 failed","code":500} {"msg":"中文 failed","code":500} Solo cambian las secuencias de escape. Las comillas, las claves y los números se quedan exactamente como estaban, así que puedes pegar la línea entera en vez de ir sacando los escapes a mano.
Varias representaciones en un mismo pegado
U+4E2D \u{1F600} 中 \ud83d\ude00 中 😀 中 😀
Un punto de código, un escape con llaves de ES6, una entidad HTML y un par sustituto, todos decodificados en una sola pasada. No hay que seleccionar ni configurar nada antes.
Un carácter, todas sus representaciones
中
\u4E2D JavaScript / Java / JSON
\u{4E2D} ES6 / Rust
U+4E2D code point
E4 B8 AD UTF-8
\344\270\255 octal El mismo carácter escrito como lo espera cada lenguaje. Ojo con Python y Go: para los caracteres fuera del BMP hace falta la forma ancha, porque un par sustituto no compila en Go y lanza UnicodeEncodeError en Python.
Cómo usar
- 1
Pega
Escapes, puntos de código, entidades, bytes codificados o texto normal. No hace falta decir de qué se trata.
- 2
Lee el resultado
El texto legible aparece al momento, junto con una nota de qué representaciones se han reconocido.
- 3
Copia la forma que necesitas
Debajo del resultado están todas las representaciones, cada una con su propio botón de copiar.
- 4
Inspecciona si algo no cuadra
Abre la tabla de caracteres para ver puntos de código, bytes, escritura y nombres, y activa «Mostrar caracteres invisibles» para sacar a la luz lo que no se ve.
Errores que conviene conocer
Escribir un par sustituto donde el lenguaje quiere un escape ancho
Un par que funciona en JSON se convierte en dos mitades rotas en Python y no compila en Go. Usa la forma ancha para los caracteres por encima de U+FFFF.
\ud83d\ude00
\U0001F600
Decodificar las referencias numéricas de HTML como puntos de código a secas
Las referencias entre 128 y 159 hay que leerlas a través de windows-1252. Una implementación ingenua convierte una comilla simple derecha en un carácter de control invisible, y por eso en una exportación antigua esos puntos no muestran absolutamente nada.
’ -> U+0092
’ -> U+2019
Usar un escape de CSS corto delante de un carácter hexadecimal
El analizador sigue tragando dígitos hexadecimales, así que el escape y el carácter siguiente se funden en un único punto de código equivocado. Rellena hasta seis dígitos.
\4E2Da
\004E2Da
Cuándo lo necesitas
- Leer logs
- Los logs de servidor y las respuestas de API llegan a menudo con lo no ASCII escapado. Pega la línea y léela sin tener que editarla antes.
- Mover cadenas entre lenguajes
- Copia el escape en la forma exacta que acepta el lenguaje de destino, en vez de convertir a mano entre pares sustitutos y escapes anchos.
- Perseguir un bug de codificación
- Cuando una comparación falla o la base de datos rechaza un valor, la tabla de caracteres enseña exactamente qué puntos de código y qué bytes hay en juego.
- Limpiar contenido pegado
- El texto copiado de una página web o de un documento suele arrastrar caracteres invisibles. Encuéntralos antes de que lleguen a producción.
Detalles técnicos
- Se escapan unidades de código, no caracteres
- JavaScript, Java y JSON escapan unidades de código UTF-16, así que un carácter por encima de U+FFFF necesita dos escapes. Python y Go ofrecen en cambio una forma de ocho dígitos que se traga el punto de código entero.
- Las referencias numéricas de HTML se remapean
- La especificación HTML exige que las referencias numéricas del rango 128 a 159 se lean a través de windows-1252 y no como puntos de código, de modo que una referencia como 146 es una comilla simple derecha y no un carácter de control invisible.
- Los escapes de CSS necesitan relleno
- Un escape de CSS consume hasta seis dígitos hexadecimales, así que un escape corto seguido de un carácter hexadecimal se funde en un único punto de código equivocado. Rellenar hasta seis dígitos elimina la ambigüedad, y un espacio a continuación se consume como terminador.
- Los sustitutos sin pareja acaban distinto en cada sitio
- Un sustituto sin pareja lo conserva la serialización JSON, lo reemplaza en silencio TextEncoder, lo rechaza la codificación porcentual, Java lo escribe como un signo de interrogación y Python lanza un error.
Buenas prácticas
- Normaliza antes de comparar
- Pliega los dos lados a la misma forma de normalización antes de comparar o deduplicar, sobre todo con nombres propios e identificadores.
- Para Python y Go, la forma ancha
- Un par sustituto es válido en JSON pero se rompe en esos dos lenguajes. Usa el escape de ocho dígitos cuando el destino sea código Python o Go.
- Busca los caracteres invisibles pronto
- Valida lo que se pega en el borde de entrada, en vez de depurar más tarde una comparación que no cuadra.
- Guarda el original
- Decodificar deja de ser reversible sin pérdidas en cuanto aparecen caracteres de reemplazo. Conserva el valor crudo hasta estar seguro.
Preguntas frecuentes
¿Qué significa \u4e2d\u6587 y cómo lo leo?
Se han perdido las barras invertidas y solo me queda u4e2d. ¿Se puede decodificar igual?
¿Por qué un emoji se escribe con dos escapes \u?
¿Cómo hago el camino inverso y convierto texto a Unicode?
Dos cadenas se ven idénticas pero mi código dice que son distintas. ¿Por qué?
Hay algo invisible en mi cadena que me rompe el código. ¿Cómo lo encuentro?
¿Se sube a algún sitio lo que pego?
Herramientas relacionadas
Ver todas las herramientas →Decodificador y Codificador Base64
Codificación y Formato
Decodifica y codifica Base64 online de forma gratuita. Conversión en tiempo real con soporte completo de UTF-8 y emojis. 100% privado — funciona en tu navegador. Sin registro.
Conversor de Base64 a Imagen
Codificación y Formato
Decodifica una cadena Base64 o data URI de vuelta a una imagen en tu navegador. Previsualiza, lee dimensiones y MIME, luego descarga como PNG, JPG, GIF, SVG. Sin subir.
Convertidor de CSV a JSON
Codificación y Formato
Convierte CSV a JSON en tu navegador. RFC 4180, inferencia de tipos, fila de cabecera, seguro para big-int. 100% privado, sin carga.
Conversor de .env a JSON
Codificación y Formato
Pega un archivo .env y obtén JSON al instante. Tus contraseñas, claves API y tokens nunca salen del navegador: 100% privado, sin subidas, gratis.
Decodificador de entidades HTML gratuito — Desescapar HTML
Codificación y Formato
Decodifica entidades HTML y desescapa HTML online: gratis, sin registro, 100 % en tu navegador. Convierte referencias nombradas, decimales y hex de vuelta en caracteres; nunca se sube.
Codificador de entidades HTML gratuito — Escapar HTML
Codificación y Formato
Codifica entidades HTML y escapa caracteres especiales (< > & " ') online: gratis, sin registro, 100 % en tu navegador. Salida con nombre, decimal o hex; nunca se sube.