Normalizador Unicode

La misma cadena visible puede almacenarse como distintas secuencias de bytes según si un acento vive como un solo punto de código o como una letra más una marca de combinación. Este normalizador convierte texto entre las cuatro formas de normalización Unicode (NFC, NFD, NFKC, NFKD) para que tus cadenas se comparen sin problemas en bases de datos, índices de búsqueda, scripts de deduplicación y coincidencias de regex.

Cómo normalizar texto Unicode

  1. 1

    Pega tu entrada

    Introduce la cadena: letras acentuadas, texto CJK, ligaduras, cualquier cosa que parezca inconsistente.

  2. 2

    Elige una forma

    Elige NFC (compuesta, la forma web habitual), NFD (descompuesta), NFKC (compuesta de compatibilidad) o NFKD (descompuesta de compatibilidad).

  3. 3

    Compara los recuentos

    La herramienta informa el número de caracteres (puntos de código) y la longitud en bytes antes y después, para que veas si la forma acortó o alargó la cadena.

  4. 4

    Copia la salida normalizada

    Usa el resultado en tu base de datos, carga útil de API, generador de slugs o fixture de prueba.

Las cuatro formas y cuándo usar cada una

La normalización Unicode está definida por el anexo estándar UAX #15. Las cuatro formas difieren en dos ejes: canónica frente a compatibilidad, y compuesta frente a descompuesta.

Referencia comparativa

Forma Composición Asignación Cuándo usarla
NFC Compuesta Solo canónica Predeterminada para contenido web, bases de datos, nombres de archivo
NFD Descompuesta Solo canónica Procesamiento de texto que quita acentos por carácter
NFKC Compuesta Incluye compat. Búsqueda, identificadores, filtros de spam, plegado de visualización
NFKD Descompuesta Incluye compat. Normalización agresiva antes de quitar diacríticos

Las formas canónicas conservan el significado

Escribe é y cambia de forma. NFC informa 1 carácter y 2 bytes (el único punto de código U+00E9), mientras que NFD informa 2 caracteres y 3 bytes (una e simple seguida de un acento agudo de combinación, U+0301). Ambas se ven idénticas en pantalla, pero son secuencias de bytes distintas, y esa discrepancia es justo lo que arregla la normalización. Las formas canónicas solo reordenan los bytes, así que é en cualquiera de las dos formas siempre significa la letra e con acento agudo.

Lo que “compatibilidad” cambia realmente

Las formas K (NFKC, NFKD) también reescriben caracteres que parecen relacionados pero llevan un formato distinto. Esto tiene pérdida: no puedes recuperar el original. Por ejemplo:

  • fi (U+FB01, ligadura latina minúscula fi) pasa a fi (dos letras)
  • ① (U+2460, dígito uno en círculo) pasa a 1
  • ㌀ (U+3300, el cuadrado CJK “apaato”) pasa a アパート
  • La A de ancho completo (U+FF21) pasa a A

Eso es potente para búsqueda y deduplicación, pero destructivo para la tipografía, así que recurre a las formas K solo cuando la fidelidad visual no importa.

Una regla práctica

  • Almacena el contenido del usuario en NFC.
  • Compara identificadores en NFC para que café escrito como un punto de código y café escrito como e + U+0301 coincidan; sube a NFKC cuando también necesites que fi y fi, o la A de ancho completo y A, se comparen como iguales, como hacen las reglas de identificadores de UAX #31.
  • Genera slugs sin acentos normalizando a NFD y eliminando el bloque de marcas de combinación U+0300 a U+036F.

Preguntas frecuentes

Normalmente significa que tu entrada ya estaba en la forma de destino. Pega texto que mezcle fuentes (un nombre de archivo de Mac, un fragmento de PDF copiado, una fila de una base de datos antigua) y será mucho más probable que veas cambiar los recuentos de caracteres y bytes.

Para URLs de visualización, NFC. Para slugs en los que quieras ASCII puro, normaliza a NFD, quita las marcas de combinación con un regex en U+0300 a U+036F y luego pon todo en minúsculas. NFKD es una alternativa cuando además quieres plegar ligaduras y dígitos en círculo.

Las formas canónicas (NFC, NFD) nunca cambian el significado, solo reordenan bytes. Las formas de compatibilidad (NFKC, NFKD) sí lo cambian: las ligaduras se separan, las letras de ancho completo se pliegan y los superíndices se aplanan. Úsalas solo cuando eso es lo que buscas.

La normalización se ejecuta en nuestro servidor mediante la clase Normalizer de PHP y el resultado vuelve en la misma solicitud; tu texto no se almacena. Solo registramos un evento anónimo que indica qué forma se aplicó, nunca el contenido en sí.

Herramientas relacionadas

Herramienta disponible en otros idiomas