← Todos los artículos

ZIP de Mac con nombres raros en Windows: cómo arreglarlo

Si abres en Windows un archivo ZIP creado en un Mac y los nombres de los archivos aparecen con tildes rotas o con letras separadas, la causa suele ser una de estas dos y ninguna obliga a tocar el contenido. La primera es que el archivo guarda los nombres con una codificación que Windows interpreta mal (ves cosas como José.pdf). La segunda es que macOS guarda las letras acentuadas descompuestas en dos partes, así que la tilde aparece suelta (Mo´nica.xlsx) o la ñ se ve como una n seguida de una tilde separada. La primera se resuelve extrayendo con otra herramienta. La segunda se resuelve normalizando los nombres a la forma NFC, que puedes hacer en el navegador o con un comando corto de PowerShell. Los pasos siguientes cubren los dos casos.

Por qué los nombres se rompen al pasar de Mac a Windows

El formato ZIP guarda cada nombre de archivo como una secuencia de bytes y una marca que indica si esos bytes están en UTF-8. El contenido de los archivos no se altera, por eso los documentos se abren bien en cuanto logras acceder a ellos. Lo que se rompe son las etiquetas.

La situación típica es esta. Un compañero con un Mac selecciona una carpeta en el Finder, elige Comprimir y te envía el .zip por correo o por Slack. Tú lo abres en el Explorador de archivos de Windows, eliges Extraer todo y la carpeta resultante contiene nombres como estos:

  • Mo´nica_factura.xlsx en lugar de Mónica_factura.xlsx
  • Jose´ Contrato.pdf en lugar de José Contrato.pdf
  • Pen~a_presupuesto.docx en lugar de Peña_presupuesto.docx, con la tilde de la ñ separada

En el otro caso de fallo aparecen nombres ilegibles como José Contrato.pdf o Niño.docx.

Son dos problemas distintos que se parecen a simple vista:

Desajuste de codificación (texto ilegible). El programa que creó el ZIP escribió bytes en UTF-8 pero no los marcó como tales, y el extractor de Windows los interpretó con la página de códigos heredada del sistema. Obtienes cadenas de letras mayúsculas acentuadas y símbolos sin relación con el nombre original. El nombre sigue intacto; simplemente se decodificó mal.

Unicode descompuesto (NFD). macOS guarda muchas letras acentuadas como dos caracteres: la ó se convierte en una o seguida de un acento combinante, y la ñ en una n seguida de una tilde combinante. El nombre es Unicode válido y Windows lo acepta, pero Windows, la mayoría de formularios web y buena parte de los servidores esperan la forma compuesta (NFC). Por eso las letras se ven raras, la búsqueda del Explorador no encuentra el archivo, los scripts que comparan nombres fallan y los formularios de subida pueden rechazar el archivo o duplicarlo. Este es el caso de Mo´nica y Pen~a.

Distinguirlos lleva diez segundos, así que conviene hacerlo antes que nada.

Paso 1: averigua qué problema tienes

Abre la carpeta extraída (o mira el ZIP en el Explorador sin extraerlo) y fíjate en uno de los nombres dañados.

  1. Si el nombre contiene caracteres que no forman parte de ninguna palabra real (é, ñ, ’), es el desajuste de codificación. Ve directamente a la solución B.
  2. Si el nombre se lee bien pero las tildes parecen separadas de la letra, o la ñ aparece como dos piezas, es NFD. Confírmalo con esta prueba rápida:
    • Haz clic derecho en el archivo y elige Cambiar nombre.
    • Pulsa Fin y después Retroceso una vez.
    • Si desaparece solo la tilde y la letra base se queda, el nombre está descompuesto. En un nombre normal (NFC), Retroceso borra la letra completa con su tilde.

Si te manejas con PowerShell, este comando lo indica directamente:

Get-ChildItem -Recurse -File | Where-Object {
  -not $_.Name.IsNormalized([Text.NormalizationForm]::FormC)
} | Select-Object FullName

Cualquier archivo que liste está en NFD.

Solución A: nombres dañados por NFD (tildes separadas, ñ partida)

Tienes dos opciones razonables. Una funciona por completo en el navegador y conserva el ZIP como archivo comprimido; la otra renombra los archivos después de extraerlos.

Opción 1: reparar los nombres dentro del ZIP en el navegador

Es lo más cómodo si quieres reenviar el ZIP a otra persona o mantenerlo intacto.

  1. Abre la herramienta para restaurar nombres en ZIP en tu navegador.
  2. Arrastra el .zip desde la carpeta de Descargas a la página (se admiten archivos de hasta 200 MB).
  3. La herramienta reescribe los nombres dentro del archivo de NFD a NFC y te ofrece un ZIP corregido para descargar.
  4. Extrae el nuevo ZIP con Extraer todo como de costumbre. Nombres como José Contrato.pdf o Peña_presupuesto.docx aparecen ahora bien, y el buscador del Explorador los encuentra.

El procesamiento se hace en tu navegador: el archivo y sus nombres no se suben a ningún servidor, lo que importa si el ZIP contiene contratos de clientes o documentos de recursos humanos. Es gratuita. Si ya extrajiste los archivos y solo tienes ficheros sueltos, la misma web permite arrastrarlos y renombrarlos por lotes.

Opción 2: renombrar después de extraer, con PowerShell

Windows incluye lo necesario para normalizar nombres; .NET lleva años haciendo normalización Unicode. Trabaja primero sobre una copia de la carpeta, porque este proceso renombra en el mismo sitio.

  1. Extrae el ZIP normalmente.
  2. Abre la carpeta extraída, haz clic en la barra de direcciones, escribe powershell y pulsa Intro. Se abrirá una ventana de PowerShell en esa carpeta.
  3. Pega este código y pulsa Intro:
Get-ChildItem -Recurse -File | ForEach-Object {
  $nfc = $_.Name.Normalize([Text.NormalizationForm]::FormC)
  if ($nfc -ne $_.Name) {
    Rename-Item -LiteralPath $_.FullName -NewName $nfc
  }
}
  1. Si también hay carpetas afectadas, ejecútalo otra vez cambiando -File por -Directory. Renombra las carpetas después de los archivos que contienen, o las rutas cambiarán por el camino.

Este método sirve bien para casos puntuales y para quien quiera incluirlo en un script de compilación. Su desventaja es que no toca el ZIP original y es fácil ejecutarlo en la carpeta equivocada.

Solución B: nombres dañados por desajuste de codificación

Si ves texto del tipo José, normalizar no servirá de nada, porque hay que decodificar los bytes como UTF-8 desde el principio.

  1. Instala 7-Zip (gratuito, en 7-zip.org) u otro compresor de terceros. Suelen leer bien los nombres UTF-8 aunque falte la marca correspondiente, que es donde el extractor integrado de Windows suele fallar.
  2. Haz clic derecho sobre el ZIP y elige 7-Zip → Extraer aquí (o Extraer en "nombredecarpeta").
  3. Revisa los nombres. Si ahora se leen bien, ya está.
  4. Si se leen bien pero las tildes o la ñ siguen separadas, tenías los dos problemas a la vez. Vuelve a la solución A y normaliza los archivos extraídos.

Si incluso con un extractor de terceros salen caracteres sin sentido, el programa que creó el archivo usó una codificación antigua y no UTF-8. En ese caso, lo más rápido es pedir a quien lo envió que vuelva a comprimirlo. En un Mac, el comando Comprimir integrado y la mayoría de aplicaciones de terceros escriben en UTF-8; el problema suele venir de una herramienta antigua o poco común, o de un ZIP que alguien volvió a empaquetar en un Windows con otro idioma del sistema.

Cómo evitarlo la próxima vez

Unos cuantos hábitos eliminan casi todo esto, tanto para quien envía como para quien recibe.

Si envías desde un Mac: antes de comprimir, puedes pasar la carpeta por un normalizador para que los nombres ya estén en NFC. Otra opción es compartir un enlace de una nube en lugar de un ZIP. La mayoría de servicios en la nube normalizan los nombres al subirlos, aunque no todos, así que compruébalo una vez con un archivo de prueba. Para archivos que se suben mediante formularios web y no dentro de un ZIP, la extensión de Chrome de FilenameFixer corrige los nombres automáticamente al subir archivos en las páginas web.

Si recibes en Windows: mantén instalado 7-Zip o un programa similar. Cuando llegue un archivo creado en un Mac con nombres con tildes o con ñ, haz la prueba de los diez segundos con Retroceso antes de perder tiempo renombrando a mano. Renombrar a mano es especialmente poco fiable aquí, porque en la mayoría de tipografías los nombres descompuestos y compuestos se ven idénticos, y acabarás con dos archivos que parecen tener el mismo nombre.

Si eres desarrollador: normaliza a NFC en el límite de tu aplicación, ya sea en el controlador de subida de archivos, en un script de sincronización o en un paso de compilación. unicodedata.normalize("NFC", nombre) en Python, nombre.normalize("NFC") en Node y String.Normalize() en .NET hacen el trabajo. Sale mucho más barato que depurar por qué una prueba pasa en macOS y falla en el servidor de integración continua de Linux, porque dos nombres de archivo "idénticos" son en realidad secuencias de bytes distintas.

Nada de esto cambia el contenido de los documentos, así que no hay riesgo para su información. Lo peor que puede pasar si aciertas mal es tener que extraer el archivo una segunda vez.