BrowserTools
Inicio / Codificadores / Inspector Unicode

Inspector Unicode

Muestra cada carácter de un texto con su código y nombre, y encuentra caracteres ocultos o parecidos.

Cargando Inspector Unicode… Si no ocurre nada, activa JavaScript.

Un texto que parece idéntico en pantalla puede ser muy distinto por dentro. Una palabra copiada de un PDF puede traer un guion suave, un nombre de usuario puede esconder un espacio de ancho cero, un enlace puede cambiar la a latina por la а cirílica, y una letra acentuada puede estar guardada como un solo carácter o como letra base más un acento combinatorio. El Inspector Unicode divide cualquier texto en los caracteres que ve el lector (agrupaciones de grafemas) y enumera cada punto de código que contienen con su número U+, su nombre oficial Unicode, su categoría general y su bloque, para que veas exactamente con qué estás tratando.

Ejemplos

Entrada é (one code point)
Salida U+00E9 LATIN SMALL LETTER E WITH ACUTE

Forma NFC, 2 bytes en UTF-8.

Entrada é (two code points)
Salida U+0065 + U+0301 COMBINING ACUTE ACCENT

Forma NFD: se ve idéntica, pero la comparación da distinto.

Entrada pаypal (with Cyrillic а)
Salida U+0430 CYRILLIC SMALL LETTER A

Marcada como palabra con mezcla de escrituras.

Preguntas frecuentes

¿Cómo encuentro un espacio de ancho cero en mi texto?
Pega el texto en el cuadro. Cada carácter invisible aparece en la tabla como una etiqueta (ZWSP para el espacio de ancho cero, ZWJ, WJ, BOM, SHY, etc.) y la lista de avisos de arriba los cuenta. Usa el panel de limpieza para copiar una versión sin ellos.
¿Qué diferencia hay entre carácter, punto de código y byte?
Un punto de código es una entrada numerada de Unicode, como U+00E9 para é. Lo que el lector ve como un carácter (un grafema) puede estar formado por varios puntos de código: un emoji con tono de piel y un joiner puede tener cuatro o más. Los bytes dependen de la codificación: UTF-8 usa de 1 a 4 bytes por punto de código y UTF-16 usa 2 o 4. Los contadores muestran todo esto para tu texto.
¿Por qué dos cadenas que parecen iguales no coinciden?
Normalmente por la normalización o por caracteres ocultos. "Café" puede guardarse con una é precompuesta (NFC) o con e seguida de un acento combinatorio (NFD); se ven igual pero la comparación da distinto. Un espacio de no separación, un carácter de ancho cero o una letra cirílica parecida tienen el mismo efecto. Normalizar ambas cadenas a NFC y eliminar los caracteres invisibles resuelve la mayoría de los casos.
¿Qué son NFC, NFD, NFKC y NFKD?
Son las cuatro formas de normalización Unicode. NFC compone los caracteres siempre que puede y es la forma recomendada para almacenar texto y para la web. NFD los descompone en letras base y marcas combinatorias. Las formas K (de compatibilidad) además convierten variantes parecidas en una forma simple: la ligadura fi pasa a fi, el superíndice ² pasa a 2 y las letras de ancho completo pasan a ASCII. Las formas K pierden información, así que úsalas para buscar y comparar, no para almacenar.
¿Qué es un ataque de homóglifos o de mezcla de escrituras?
Es el uso de caracteres de otra escritura que se parecen a letras latinas, por ejemplo la а cirílica (U+0430) en lugar de la a latina, para que un dominio, un nombre de usuario o un nombre de archivo falso parezca auténtico. El inspector marca cualquier palabra que mezcle letras latinas con cirílicas, griegas, armenias o cheroqui y muestra los puntos de código exactos, de modo que la sustitución salta a la vista.
¿Qué son los caracteres de control bidireccional y por qué se marcan?
Caracteres como RLO (U+202E) o RLI (U+2067) indican al motor de texto que muestre lo que sigue de derecha a izquierda. Son necesarios en algunos textos en árabe y hebreo, pero también pueden disfrazar contenido: un archivo llamado invoice, seguido de RLO y de fdp.exe, se muestra como invoiceexe.pdf, y la investigación Trojan Source de 2021 demostró que pueden ocultar lógica maliciosa en código fuente. Fuera de un texto realmente de derecha a izquierda, casi siempre son una señal de alarma.
¿Se sube mi texto a algún sitio?
No. El análisis se ejecuta por completo en tu navegador. Lo único que se descarga es la tabla de nombres Unicode, que es igual para todos y viene de este sitio, no de terceros.
¿De dónde salen los nombres de los caracteres?
De la Unicode Character Database que publica el Unicode Consortium bajo la Unicode License, con la versión indicada al pie de la página. Los nombres de los ideogramas CJK y de las sílabas Hangul se generan con las reglas algorítmicas de la propia norma. La categoría general viene del soporte Unicode integrado en tu navegador, así que un carácter muy reciente puede aparecer como no asignado en un navegador antiguo.

Acerca de Inspector Unicode

La herramienta señala los caracteres que suelen dar problemas. Caracteres de formato invisibles como el espacio de ancho cero, el zero-width joiner, el word joiner y la marca de orden de bytes (BOM); controles bidireccionales como RLO y LRI, que pueden reordenar visualmente el texto y fueron la base del ataque "Trojan Source" contra código fuente; espacios de no separación, finos y otros espacios poco habituales que no coinciden con un espacio normal en código ni en búsquedas; letras con aspecto de espacio en blanco usadas para fingir nombres vacíos; y palabras que mezclan letras latinas con cirílicas o griegas, el clásico truco de los homóglifos detrás de los dominios de phishing. Las secuencias de emoji se reconocen, así que los joiners dentro de 👩🏽‍💻 no se marcan como sospechosos.

Haz clic en cualquier fila para ver todas las representaciones de ese punto de código: bytes UTF-8, unidades UTF-16, entidades HTML numéricas y con nombre, escapes de JavaScript, CSS y Python y la forma codificada para URL. Los contadores sobre la tabla muestran el número de grafemas, puntos de código, unidades UTF-16 (lo que devuelve length en JavaScript) y bytes UTF-8, lo que explica por qué una columna de base de datos, un SMS o un tuit cuentan tu texto de forma distinta a lo que ves.

El panel de normalización compara las cuatro formas de normalización Unicode (NFC, NFD, NFKC, NFKD) y te deja copiar o inspeccionar cualquiera de ellas, que es como se arreglan cadenas que parecen iguales pero fallan en una comparación. Por último, el panel de limpieza elimina caracteres invisibles y bidireccionales, cambia los espacios exóticos por un espacio normal, quita caracteres de control sueltos y, si quieres, normaliza el resultado, dejando los emoji intactos. Los nombres y bloques de los caracteres vienen de la Unicode Character Database oficial, y todo se ejecuta localmente en tu navegador.

UTF-8 se diseñó sobre un mantel de papel

En septiembre de 1992, Ken Thompson y Rob Pike, de Bell Labs, no estaban contentos con la codificación multibyte propuesta para el nuevo juego universal de caracteres. Durante una cena en un restaurante de Nueva Jersey, Thompson esbozó un esquema mejor sobre un mantel de papel: el ASCII sigue ocupando un byte, ningún byte de una secuencia multibyte puede confundirse con un carácter ASCII y siempre se puede encontrar el inicio de un carácter mirando los bits altos. Lo implementaron en el sistema operativo Plan 9 en pocos días.

Ese diseño es UTF-8, y su compatibilidad con ASCII es la razón por la que se impuso en la web, donde hoy lo usa la gran mayoría de las páginas. El propio Unicode había nacido unos años antes, con la propuesta de Joe Becker de 1988 de un juego de caracteres "Unicode" y la primera versión de la norma publicada en 1991.

La flexibilidad que hizo universal a Unicode también trajo nuevos problemas de seguridad. En 2017 un investigador registró un dominio escrito solo con letras cirílicas que los navegadores mostraban como apple.com, lo que llevó a los navegadores a presentar esos nombres en su forma punycode. En 2021, el artículo Trojan Source de la Universidad de Cambridge demostró que los caracteres de control bidireccional podían hacer que el código fuente se viera de forma distinta a como lo lee el compilador.

Apoyar