Skip to content

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.

Sin rastreo Se ejecuta en el navegador Gratis

Todo se ejecuta en tu navegador: lo que pegas nunca se sube, ni se registra, ni se guarda.

0 caracteres
Texto legible
El resultado aparece aquí
Normalizar
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  
Cada conversión de la tabla de referencia se contrastó entre dos implementaciones independientes antes de publicar. — Equipo de Ingeniería de Go Tools · Aug 27, 2026

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. 1

    Pega

    Escapes, puntos de código, entidades, bytes codificados o texto normal. No hace falta decir de qué se trata.

  2. 2

    Lee el resultado

    El texto legible aparece al momento, junto con una nota de qué representaciones se han reconocido.

  3. 3

    Copia la forma que necesitas

    Debajo del resultado están todas las representaciones, cada una con su propio botón de copiar.

  4. 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.

✗ Incorrecto
\ud83d\ude00
✓ Correcto
\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.

✗ Incorrecto
’  ->  U+0092
✓ Correcto
’  ->  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.

✗ Incorrecto
\4E2Da
✓ Correcto
\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?
Cada \uXXXX es una unidad de código UTF-16 escrita en hexadecimal. \u4e2d es U+4E2D y \u6587 es U+6587; juntos forman la palabra china 中文. Pega la cadena entera arriba y recuperas el texto legible: el JSON o el log que la rodea se conserva intacto.
Se han perdido las barras invertidas y solo me queda u4e2d. ¿Se puede decodificar igual?
Sí. Las terminales y las tuberías de logs se comen las barras invertidas a menudo. Un u4e2du6587 pelado se reconoce y se decodifica, mientras que las palabras normales que simplemente llevan una u se dejan en paz.
¿Por qué un emoji se escribe con dos escapes \u?
Los caracteres por encima de U+FFFF no caben en una sola unidad de código UTF-16, así que JavaScript, Java y JSON los escriben como un par sustituto. Una cara sonriente es un punto de código, dos unidades UTF-16 y cuatro bytes UTF-8. La tabla de caracteres enseña las tres cuentas.
¿Cómo hago el camino inverso y convierto texto a Unicode?
Escribe o pega texto normal y mira la tabla que hay debajo del resultado. Todas las representaciones se generan de una vez, así que copias la forma exacta que espera tu lenguaje en vez de convertir dos veces.
Dos cadenas se ven idénticas pero mi código dice que son distintas. ¿Por qué?
Lo más probable es que estén normalizadas de forma distinta. Una letra acentuada puede ser un solo punto de código o una letra base más una marca de combinación: las dos se dibujan igual pero no son iguales. El botón NFC las pliega a la misma forma. Y ojo, la normalización tampoco es una operación neutra para el chino, el japonés y el coreano: los ideogramas de compatibilidad cambian bajo un NFC normal.
Hay algo invisible en mi cadena que me rompe el código. ¿Cómo lo encuentro?
Activa «Mostrar caracteres invisibles». Las marcas de orden de bytes, los espacios de ancho cero, los espacios de no separación y los selectores de variación reciben una marca visible que ocupa su lugar, y la tabla de caracteres nombra cada uno y da sus bytes.
¿Se sube a algún sitio lo que pego?
No. La conversión ocurre en tu navegador, sin ninguna petición de red. Nada se sube, ni se registra, ni se guarda, así que pegar logs de producción es seguro.

Herramientas relacionadas

Ver todas las herramientas →