Por qué un texto que parece idéntico no lo es
Unicode tiene más de 150.000 caracteres, y muchos son invisibles o se ven exactamente igual que otro. Una cadena copiada de una página web, un PDF o una app de chat puede contener zero-width spaces, espacios de no separación, guiones blandos, marcas de dirección y una marca de orden de bytes; ninguno se ve en pantalla, todos hacen fallar comparaciones, inicios de sesión y consultas a bases de datos. Los dobles son peores: la а cirílica (U+0430) es idéntica píxel a píxel a la a latina (U+0061) en la mayoría de las fuentes, lo que es la base de los dominios de phishing homógrafos y de las incidencias de «por qué no existe este usuario».
Qué informa el inspector
- Punto de código (
U+00E9): el número que asigna Unicode. Un carácter visible puede ser un punto de código (éprecompuesto) o dos (e+ acento agudo combinante), esa es la diferencia NFC/NFD. - Bytes UTF-8: 1–4 bytes por punto de código; lo que se guarda en archivos, bases de datos y HTTP. Unidades UTF-16: lo que cuentan las cadenas de JavaScript y Java; los emoji necesitan dos.
- Grafemas: lo que una persona ve como un carácter. Un emoji de bandera es un grafema, dos puntos de código, ocho bytes UTF-8.
Normalización
NFC compone base + marca en un único punto de código cuando existe; NFD descompone. Compara y guarda el texto en NFC (los nombres de archivo de macOS llegan en NFD, un clásico error de sincronización). NFKC y NFKD pliegan además los caracteres de compatibilidad: ligaduras, letras de ancho completo, superíndices y numerales romanos se convierten en sus equivalentes simples, lo que se quiere para búsquedas e identificadores pero destruye el formato.
Sanear entradas
Para identificadores, nombres de usuario y dominios: normaliza a NFKC, elimina los caracteres que esta herramienta marca como invisibles y rechaza o avisa ante escrituras mezcladas. La opción «Quitar invisibles» te da la cadena limpia para copiar.
Preguntas
¿Qué es un zero-width space?
U+200B, un carácter sin anchura que marca un posible punto de salto de línea. Sobrevive al copiar y pegar y es invisible en casi todos los editores. Los procesadores de texto, Slack y algunas páginas web lo insertan; este inspector marca cada uno.
¿Por qué «é» a veces cuenta como dos caracteres?
Puede escribirse como el punto de código único U+00E9 o como U+0065 e seguido de U+0301 acento agudo combinante. Ambos se ven igual y son distintos a menos que ambos se normalicen a NFC.
¿Cómo escribo un carácter por su punto de código?
Linux (GTK): Ctrl+Mayús+U, luego el hex, luego espacio. macOS: activa la fuente de entrada «Unicode Hex Input» y mantén Opción. Windows: escribe el hex y pulsa Alt+X en Word o WordPad. En código: "\u{1F600}" (JS), "\N{...}" o "\U0001F600" (Python).
¿Cuál es la diferencia entre UTF-8 y Unicode?
Unicode es el catálogo de caracteres y sus números. UTF-8 (y UTF-16, UTF-32) es una forma de escribir esos números como bytes. UTF-8 es la que se usa en todas partes en la web.