ZIP de Mac con tildes rotas en Windows: cómo arreglarlo
Si un ZIP de Mac con tildes se abre en Windows con nombres como José_contrato.pdf en lugar de José_contrato.pdf, el archivo se descomprimió con la codificación de texto equivocada; volver a extraerlo con 7-Zip u otra herramienta que entienda UTF-8 suele resolverlo. Si los nombres parecen correctos pero el buscador no los encuentra, un portal rechaza la subida o de repente tienes dos archivos llamados Peña.jpg uno al lado del otro, las tildes y la eñe están guardadas como dos caracteres (una "e" o una "n" más un acento suelto) y hay que normalizarlas. Los dos problemas vienen del mismo ZIP y tienen soluciones distintas, así que lo primero es distinguirlos.
Por qué un ZIP de Mac con tildes se rompe en Windows
Un archivo ZIP no lleva una regla única y universal sobre cómo se codifican los nombres de archivo. Cada programa que crea un archivo comprimido decide cómo escribir los nombres, y cada programa que lo abre decide cómo leerlos. Durante años los Mac y los PC con Windows tomaron decisiones distintas, y las letras con tilde y la eñe quedan justo en medio de esa grieta.
Causa 1: mojibake por una página de códigos incorrecta
Cuando haces clic derecho en una carpeta del Finder y eliges Comprimir, macOS escribe los nombres dentro del ZIP en UTF-8. Las versiones antiguas del Explorador de Windows, y algunas herramientas de terceros, daban por hecho que los nombres de un ZIP usaban la página de códigos heredada de Windows. Leer bytes UTF-8 como si fueran Windows-1252 convierte é en é, á en á, ñ en ñ y ü en ü. Por eso José se convierte en José y Muñoz en Muñoz.
Es un problema exclusivamente de visualización y extracción. Los bytes dentro del archivo están bien; la herramienta que los descomprimió adivinó mal.
Causa 2: acentos descompuestos (NFD) que parecen correctos pero no lo son
Aunque la extracción salga perfecta, hay un segundo problema más silencioso. macOS tiende a guardar una letra acentuada como dos puntos de código Unicode: la letra base seguida de un acento combinante independiente. Esto se llama forma de normalización D (NFD). Windows, los navegadores y la mayoría de servidores esperan el carácter precompuesto único, la forma de normalización C (NFC).
Windows crea sin quejarse un archivo cuyo nombre contiene e + acento agudo combinante, o n + tilde combinante. En pantalla se ve como é o ñ, así que nada parece raro. Pero para el sistema de archivos es una cadena distinta de la é que escribes con un teclado de Windows. Las consecuencias aparecen más tarde:
- La búsqueda de Windows y el cuadro de búsqueda del Explorador no encuentran
Josécuando lo escribes. - Un script o una fórmula de Excel que busca por nombre de archivo falla justo con los archivos que llevan tilde o eñe.
- Al copiar la carpeta extraída junto a otra ya existente aparecen duplicados aparentes: dos
currículum.docxcon tamaños y fechas distintos. - Un formulario web o un portal de documentos rechaza la subida, o guarda el nombre con secuencias extrañas como
%CC%81en la URL.
Si tus síntomas coinciden con esta lista, volver a extraer no servirá de nada. Hay que convertir los nombres de NFD a NFC después de la extracción.
Comprobación rápida: ¿cuál de los dos problemas tienes?
Normalmente se distingue con solo mirar la lista de archivos.
- Se ven caracteres basura (
é,ñ,á,’): es el problema de la página de códigos, la causa 1. Pasa a la siguiente sección. - Los nombres parecen normales pero se comportan de forma rara: probablemente NFD, la causa 2. Confírmalo en PowerShell:
$name = (Get-Item -LiteralPath "C:\Users\tu_usuario\Downloads\extraido\José_contrato.pdf").Name
$name.Length
$name.IsNormalized([Text.NormalizationForm]::FormC)
Pega la ruta de uno de los archivos sospechosos. Si Length es uno más que el número de caracteres que ves (José_contrato.pdf tiene 17 caracteres, pero en NFD da 18) e IsNormalized devuelve False, el nombre está descompuesto.
Una comprobación más rápida si prefieres el ratón: pulsa F2 sobre el archivo en el Explorador, coloca el cursor justo después de la é o la ñ y pulsa Retroceso una vez. Si desaparece solo el acento o la virgulilla y queda una e o una n sin más, el acento era un carácter independiente.
Arreglar el mojibake: extraer el ZIP de Mac con una herramienta que entienda UTF-8
Borra la carpeta extraída con los nombres mal para no acabar con dos copias, y vuelve a descomprimir el .zip original con una herramienta que lea nombres en UTF-8.
7-Zip (gratis, Windows)
- Instala 7-Zip desde su sitio oficial si no lo tienes.
- Haz clic derecho sobre el ZIP en el Explorador y elige 7-Zip › Extraer aquí (en Windows 11 puede que antes tengas que pulsar Mostrar más opciones).
- Revisa los nombres extraídos.
Josédebería leerse ahora comoJosé.
Extracción integrada de Windows 10 y 11
Las compilaciones recientes de Windows manejan los nombres UTF-8 de los ZIP mucho mejor que las antiguas. Si un compañero con un equipo actualizado extrae el mismo archivo sin caracteres basura, el problema está en tu herramienta de extracción, no en el archivo. Prueba con Extraer todo desde el Explorador, o en PowerShell:
Expand-Archive -LiteralPath "C:\ruta\al\archivo.zip" -DestinationPath "C:\ruta\de\salida"
Si 7-Zip también muestra basura
A veces en el Mac se usó un compresor antiguo o poco habitual que escribió los nombres en Mac OS Roman u otra codificación heredada. 7-Zip y WinRAR permiten elegir una página de códigos al abrir un archivo; ve probando las opciones de Europa occidental hasta que los nombres se lean bien. Si nada funciona, pide a quien lo envió que vuelva a crear el archivo con el comando Comprimir del Finder o con zip -r en el Terminal; ambos escriben UTF-8.
Cuando los nombres ya se muestren correctamente, haz la comprobación de NFD de la sección anterior. Es habitual arreglar la causa 1 y descubrir que debajo estaba la causa 2.
Arreglar los acentos descompuestos después de extraer
Este paso convierte e + acento combinante en una sola é, y lo mismo con la eñe, la diéresis y cualquier otra letra especial de la carpeta. Hay dos caminos prácticos.
Opción A: renombrar con PowerShell (sin software adicional)
Esto renombra todos los archivos y carpetas bajo una ruta a su forma NFC. Pruébalo primero sobre una copia si la carpeta es importante.
$root = "C:\ruta\al\extraido"
Get-ChildItem -LiteralPath $root -Recurse |
Sort-Object { $_.FullName.Length } -Descending |
ForEach-Object {
$fixed = $_.Name.Normalize([Text.NormalizationForm]::FormC)
if ($fixed -ne $_.Name) {
$target = Join-Path $_.Directory.FullName $fixed
if (Test-Path -LiteralPath $target) {
Write-Warning "Omitido (el nombre ya existe): $($_.FullName)"
} else {
Rename-Item -LiteralPath $_.FullName -NewName $fixed
}
}
}
Qué hace exactamente:
- Renombra primero los elementos más profundos, para que renombrar una carpeta no invalide las rutas de los archivos que contiene.
- Si ya existe un archivo con el nombre correcto (la situación de los "dos
Peña.jpg"), lo omite en lugar de sobrescribirlo y te avisa de cuáles tienes que fusionar a mano. -LiteralPathes importante; sin él, los corchetes en los nombres de archivo pueden interpretarse como comodines.
Opción B: arreglar el propio ZIP antes de extraerlo
Si prefieres no ejecutar scripts, o necesitas pasar un archivo limpio a otra persona, la herramienta de restauración de ZIP de FilenameFixer toma el ZIP original del Mac (hasta 200 MB), reescribe los nombres descompuestos que contiene a NFC y te da un archivo corregido para descargar. El procesamiento ocurre en tu navegador; el archivo no se sube a ningún servidor, algo que importa cuando el ZIP contiene contratos de clientes o expedientes de personal. Es gratuita, y la misma aplicación web también admite archivos sueltos arrastrándolos y soltándolos si ya has extraído la carpeta.
Los dos caminos dan el mismo resultado: nombres que la búsqueda de Windows, los scripts y los formularios web tratan como una é, ñ, á o ü normal. La corrección no se limita a las tildes del español; la misma conversión repara nombres en coreano que llegan con las letras separadas y kana japoneses con el dakuten desprendido, algo que te encontrarás en archivos enviados por compañeros coreanos o japoneses.
Evitar el problema en el próximo archivo
Casi todo esto se puede atajar en el origen, aunque no del todo.
- Pide a quien envía que comprima desde el Finder o con
zip -ren el Terminal. Ambos escriben nombres en UTF-8, lo que elimina el riesgo de mojibake en las versiones actuales de Windows. Ninguno normaliza a NFC, así que el segundo problema puede seguir apareciendo. - Evita tildes y eñes en nombres de archivo que vayan a cruzar plataformas cuando sea razonable.
jose_contrato.pdfsobrevive a todo. Es un apaño, no una solución, y no es una opción cuando los acentos forman parte de nombres de personas o de títulos de documentos legales. - Corrige los nombres en el momento de subirlos si tu verdadero dolor de cabeza es un portal web que rechaza archivos de Mac. La extensión de FilenameFixer para Chrome convierte los nombres a NFC automáticamente mientras subes archivos en sitios web, de modo que el portal recibe
Josécomo un solo carácter. - Para desarrolladores: normaliza los nombres de archivo a NFC en el servidor al aceptar subidas, y en los scripts de compilación o sincronización que comparan rutas entre copias de trabajo en macOS y Windows.
unicodedata.normalize("NFC", nombre)en Python yString.Normalize()en .NET son las herramientas habituales. Git tienecore.precomposeunicodepara tratar el mismo problema en repositorios clonados en Mac.
Un límite que conviene reconocer: si un usuario de Windows lleva meses renombrando, editando y guardando archivos con nombres descompuestos, convertirlos después puede chocar con copias correctamente nombradas de los mismos documentos. Tanto el script de PowerShell de arriba como la herramienta de ZIP dejan los originales intactos en ese caso, pero fusionar las dos versiones es un trabajo manual. Atajar el archivo en el momento de extraerlo, como se describe aquí, da mucho menos trabajo que desenredarlo más tarde.