← Todos los artículos

Nombres de archivo NFD NFC en la web: 5 síntomas y arreglo

Si subiste un archivo desde un Mac a una página web y el nombre aparece con la tilde despegada, el enlace de descarga devuelve «archivo no encontrado» o el buscador del sitio no lo localiza aunque está ahí, casi seguro tienes un problema de nombres de archivo NFD NFC. macOS guarda las letras con tilde, la eñe y los caracteres no latinos en una forma Unicode descompuesta (NFD), mientras que la mayoría de servidores web, gestores de contenidos y navegadores esperan la forma compuesta (NFC). La solución es renombrar el archivo a NFC antes de subirlo, o hacer que el servidor normalice los nombres al recibirlos. A continuación tienes los cinco síntomas que esto provoca en las webs, qué significa cada uno y la forma más rápida de resolverlo.

Cómo empieza el problema de nombres de archivo NFD NFC

Un carácter como é se puede escribir de dos maneras en Unicode. La forma compuesta es un solo punto de código, U+00E9. La forma descompuesta son dos: una e normal seguida de un acento agudo combinante. En pantalla, las dos se ven exactamente igual. Con la ñ pasa lo mismo: puede ser U+00F1 o una n seguida de una virgulilla combinante. En coreano ocurre a mayor escala: 한글 puede guardarse como dos sílabas compuestas o como una cadena de letras sueltas (ㅎㅏㄴㄱㅡㄹ). En japonés, un kana con dakuten como が puede ser un carácter o か más una marca de sonorización aparte.

macOS ha producido históricamente la versión descompuesta (NFD) al guardar un archivo con un nombre así. Casi todo lo demás —Windows, servidores Linux, PHP, Node, los frameworks web de Python y los navegadores que muestran el resultado— da por hecho que el nombre está en NFC. Cuando un nombre NFD entra en un sistema que asume NFC, el sistema no lo «corrige»: lo trata como una cadena distinta. Ese único desajuste explica todos los síntomas que siguen.

Esto afecta a cualquiera cuyos nombres de archivo lleven caracteres que no sean ASCII puro: un currículum llamado Currículum_José_Martínez.pdf, una foto Cumpleaños_Begoña.jpg, una hoja de cálculo Presupuesto_Año_2026.xlsx o un PDF de un compañero coreano llamado 예산안_2026.xlsx. Si tus nombres son solo ASCII (informe_2026.pdf), nada de esto te afecta.

Los cinco síntomas, y cómo arreglar cada uno

1. Las tildes o las letras aparecen despegadas después de subir el archivo

Lo que ves: La lista de archivos de tu gestor de contenidos, aula virtual o portal de clientes muestra Jose´.pdf con la tilde flotando, Pen˜a.docx con la virgulilla fuera de sitio, o un nombre coreano como ㅎㅏㄴㄱㅡㄹ.docx con cada letra separada. En otros sistemas el nombre se ve bien.

Por qué: La fuente o el motor de renderizado de la web no sabe combinar la letra base con la marca combinante separada, así que las dibuja una al lado de la otra.

Solución: Renombra el archivo a NFC antes de subirlo y súbelo de nuevo. Si la plataforma no te deja borrar la entrada rota, pide al administrador del sitio que la elimine, porque al subir la versión corregida lo más probable es que se cree un segundo archivo en lugar de sustituir el primero (ver síntoma 4).

2. El enlace de descarga devuelve 404 o «archivo no encontrado»

Lo que ves: El archivo se subió sin errores. Aparece en la biblioteca de medios. Al pulsar el enlace, sale un 404 o la página dice que el archivo no existe.

Por qué: El servidor guardó el archivo con su nombre NFD, pero el enlace que generó, o el registro que guardó en la base de datos, se normalizó a NFC en algún punto del camino. La URL apunta a un nombre que difiere en unos bytes del archivo real en disco. En la barra de direcciones ambos se ven idénticos.

Solución: Para un caso puntual, vuelve a subirlo con un nombre NFC. Si esto pasa en tu propia web, la solución de verdad está en el servidor: normaliza todos los nombres entrantes a NFC antes de guardarlos. En Python es unicodedata.normalize("NFC", nombre); en JavaScript, nombre.normalize("NFC"); en PHP, Normalizer::normalize($nombre, Normalizer::FORM_C). Hazlo una sola vez en el punto de entrada de las subidas y el problema desaparece para todos los usuarios.

3. El buscador no encuentra el archivo, aunque está a la vista

Lo que ves: Escribes José en el buscador del sitio, o pulsas Ctrl+F en la lista de archivos, y no hay coincidencias. El archivo está ahí, lo ves en la lista.

Por qué: La búsqueda compara secuencias de bytes. Tú escribiste NFC; el nombre guardado es NFD. No son iguales, así que no hay coincidencia. Lo mismo ocurre en algunos clientes de correo al buscar por nombre de adjunto.

Solución: Renombra a NFC y vuelve a subirlo. Como apaño, busca la parte del nombre que no lleva tilde ni eñe (Mart en lugar de Martínez, Pe en lugar de Peña), que coincidirá con cualquiera de las dos formas.

4. «Ya existe un archivo con este nombre», o dos archivos que parecen idénticos

Lo que ves: La plataforma rechaza la subida, o acabas con dos archivos que aparentemente tienen exactamente el mismo nombre.

Por qué: Una copia es NFD y la otra NFC. Para el sistema son dos nombres diferentes, así que o detecta un conflicto en su tabla de nombres o guarda las dos sin más.

Solución: Borra la copia NFD y quédate con la NFC. Si no distingues cuál es cuál a simple vista, descarga las dos y compruébalo (ver «Cómo saber en qué forma está un nombre de archivo» más abajo).

5. Scripts, importaciones o formularios rechazan el nombre

Lo que ves: Un importador masivo, un formulario que valida nombres de archivo o un script de compilación falla con un mensaje de «caracteres no válidos», aunque el nombre solo tiene letras corrientes.

Por qué: Las reglas de validación escritas como expresiones regulares suelen admitir las letras acentuadas precompuestas, pero no las marcas combinantes. Una é descompuesta contiene U+0301, y una ñ descompuesta contiene U+0303, que muchos patrones de «solo letras» no permiten.

Solución: Normaliza a NFC antes de que el archivo llegue al validador. Si el validador es tuyo, normaliza primero la entrada y valida después.

Cómo saber en qué forma está un nombre de archivo

A simple vista no se puede, y ese es precisamente el problema. Tres comprobaciones fiables:

  1. En un Mac, en Terminal: ls | xxd | head. Una é compuesta aparece como c3 a9. Una descompuesta aparece como 65 cc 81 (la e y luego el acento combinante). Para la ñ: c3 b1 compuesta, 6e cc 83 descompuesta.
  2. En Windows, en PowerShell: [int[]][char[]]"José" imprime los puntos de código. 233 es compuesta; 101, 769 es descompuesta. Con "Peña", 241 es compuesta y 110, 771 descompuesta.
  3. En la consola de cualquier navegador: "José".normalize("NFD") === "José" devuelve true si la cadena que pegaste ya estaba en NFD.

Volver a escribir el nombre a mano en el Finder a veces produce NFC y a veces no, según el sistema de archivos y cómo se haya introducido el nombre, así que reescribirlo no es por sí solo una solución fiable.

Corregir nombres de archivo en lote antes de subirlos

Para uno o dos archivos, basta con reescribir el nombre en un equipo con Windows o renombrarlo en el servidor después de subirlo. Para una carpeta con 80 fotos con tildes, o el material de todo un cuatrimestre con nombres en coreano, eso deja de ser práctico.

Opciones que no necesitan ninguna herramienta extra:

  • Usa nombres solo con caracteres ASCII. Jose_Martinez_CV.pdf nunca tendrá este problema. Es la opción más robusta para cualquier cosa que vaya a enlazarse públicamente.
  • Normaliza con un script de una línea. En macOS tienes Python disponible: for f in *; do mv "$f" "$(python3 -c 'import sys,unicodedata;print(unicodedata.normalize("NFC",sys.argv[1]))' "$f")"; done. Funciona, pero renombrará cosas que no querías si lo ejecutas en la carpeta equivocada.
  • Arréglalo en el servidor. Si controlas la web, normalizar al subir protege a todos los usuarios futuros, no solo a ti.

Si prefieres no ejecutar scripts, FilenameFixer es una aplicación web gratuita que hace exactamente esta conversión. Arrastras los archivos al navegador, los renombra de NFD a NFC en lote, y el procesamiento ocurre localmente en tu navegador, no en un servidor. También acepta texto pegado, útil para comprobar un nombre suelto rápidamente, y puede restaurar los nombres de archivo dentro de archivos ZIP de hasta 200 MB. Para el caso concreto de las subidas, la extensión para Chrome normaliza los nombres automáticamente en el momento en que subes los archivos a una web, así que los síntomas 1 a 5 directamente no llegan a producirse. El sitio está disponible en español, inglés, coreano, japonés, francés, alemán y vietnamita.

Un límite que conviene tener claro: ninguna de estas opciones puede reparar un archivo que ya está en el servidor con un nombre roto. En ese caso, bórralo y vuelve a subirlo, o pide a quien administra la web que lo renombre en disco.

Referencia rápida

Síntoma Dónde aparece Solución
Tildes despegadas o letras separadas Lista de archivos, biblioteca de medios Renombrar a NFC y volver a subir
404 en el enlace de descarga URL pública, CMS Volver a subir; normalizar en el servidor
El buscador no encuentra nada Buscador del sitio, Ctrl+F, correo Renombrar a NFC; buscar la parte sin tilde
Duplicados o «ya existe» Subidas, carpetas compartidas Borrar la copia NFD

Una vez sabes que dos nombres que se ven iguales pueden ser cadenas distintas, cada uno de estos síntomas se vuelve predecible. Normaliza a NFC antes de que el archivo salga de tu Mac, o en la puerta de entrada del servidor, y la web tratará el nombre como esperabas desde el principio.