Por qué se desfiguran los nombres de archivo en un ZIP y cómo arreglarlo - Shift_JIS y UTF-8
La respuesta corta: las dos partes no coinciden en la codificación del nombre
Cuando un ZIP se abre y solo los nombres de archivo en japonés aparecen como cadenas del tipo «Ä╩É^âè» o «蜀咏悄繝ェ», el programa que creó el archivo y el que lo abre no coinciden en cómo están codificados los nombres. Los datos de dentro están intactos y, si se vuelven a leer los nombres con la codificación correcta, recuperan su forma original.
La especificación de ZIP, APPNOTE.TXT (PKWARE, versión 6.3.10, revisada en noviembre de 2022), solo permite indicar la codificación de un nombre de archivo con un bit de los indicadores de propósito general (general purpose bit flag): el bit 11. Si el bit 11 de los indicadores de propósito general en la cabecera de una entrada (el Language encoding flag, o EFS) está activado, el nombre debe estar en UTF-8. Ese indicador llegó con la versión 6.3.0, en septiembre de 2006.
Cuando el bit 11 no está activado, la especificación dice que el nombre debe seguir la codificación original de ZIP, que es la IBM Code Page 437 (CP437, apéndice D). CP437 es la tabla de caracteres del IBM PC de los años ochenta y no contiene ningún carácter japonés. Aun así existen innumerables ZIP con nombres en japonés, porque muchos programas nunca activaron el indicador y escribieron sin más en el campo del nombre los bytes de la codificación del propio PC (en Windows japonés, cp932, una variante de Shift_JIS). Ante un nombre sin indicador, el programa que abre el archivo solo puede adivinar la codificación, y si se equivoca aparecen caracteres sin sentido.
Hay tres formas de resolverlo: elegir de nuevo la codificación del nombre en el programa con el que se abre, rehacer el ZIP con los nombres corregidos o, en el lado de quien lo crea, activar el indicador UTF-8 o usar solo nombres ASCII. Las secciones siguientes empiezan por cómo leer el desfigurado.
Windows y macOS escriben los nombres de forma distinta
Según la referencia «Code Page Identifiers» de Microsoft, Windows en japonés usa cp932 (página de códigos 932, con el nombre shift_jis en la tabla). La documentación del módulo zipfile de Python también advierte que algunas implementaciones antiguas escriben los nombres en la codificación o página de códigos local, sobre todo en Windows.
¿Y macOS? En una comprobación con macOS 26.5 en octubre de 2026, tanto la orden ditto del sistema como la orden zip incluida (Info-ZIP Zip 3.0) escribieron un archivo llamado 写真リスト.txt («lista de fotos» en japonés) con bytes UTF-8 y sin activar el bit 11. El resultado es un ZIP cuyos nombres están en UTF-8 sin que nada lo indique.
Cómo se escriben los nombres japoneses (comprobado en octubre de 2026):
- ditto en macOS 26.5: nombres en UTF-8, bit 11 no activado
- zip en macOS 26.5 (Zip 3.0): nombres en UTF-8, bit 11 no activado
- zipfile en Python 3.14: nombres en UTF-8, bit 11 activado
- Programas antiguos de Windows (según la documentación de Python): nombres en La página de códigos del PC (cp932 en japonés), bit 11 no activado
La lista muestra los dos sentidos clásicos del problema. Un ZIP en cp932 hecho en Windows se desfigura en un programa que da por hecho UTF-8, y un ZIP en UTF-8 sin indicador hecho en un Mac se desfigura en un programa que da por hecho cp932. Pero si el lado que abre adivina bien, no pasa nada: el mismo ditto del Mac extrajo un ZIP con nombres en cp932 y recuperó correctamente 写真リスト.txt (en un sistema en japonés). Que los nombres se desfiguren o no depende de la pareja formada por la herramienta que crea el archivo y la que lo abre.
En Linux ocurre lo mismo. El manual de unzip de Debian (trixie) advierte que los nombres con caracteres de 8 bits pueden no ser portables entre sistemas, porque cada herramienta y plataforma usa codificaciones distintas para ellos.
Leer el desfigurado para encontrar la causa
La forma de un nombre desfigurado indica qué codificación se leyó como cuál. Estos son los tres modos de leer mal 写真リスト.txt, reproducidos con Python 3.14.
| Nombre que se ve | Codificación real | Leído como |
|---|---|---|
Ä╩É^âèâXâg.txt | Shift_JIS (cp932) | CP437 |
蜀咏悄繝ェ繧ケ繝�.txt | UTF-8 | Shift_JIS (cp932) |
�ʐ^���X�g.txt | Shift_JIS (cp932) | UTF-8 |
- Letras latinas con acentos y símbolos de recuadro (Ä, É, ╩ y similares): un nombre en Shift_JIS leído como CP437, el valor por defecto de la especificación. Lo hacen las herramientas que siguen la especificación al pie de la letra, como zipfile de Python
- Kanji poco habituales mezclados con katakana de ancho medio (destacan 繝 y 縺): un nombre en UTF-8 leído como Shift_JIS. Es lo que sale al abrir un ZIP en UTF-8 sin indicador hecho en un Mac con una herramienta que da por hecho cp932. En UTF-8, el hiragana y el katakana son secuencias de tres bytes que empiezan por E3, así que leídos como Shift_JIS repiten una y otra vez caracteres como 繝 y 縺
- Muchos caracteres de sustitución (�): un nombre en Shift_JIS leído como UTF-8, con los bytes no válidos en UTF-8 descartados. Esta forma no siempre se puede deshacer, así que lo seguro es elegir de nuevo la codificación en la herramienta antes de extraer
Si se extrae con los nombres desfigurados, los archivos se guardan con esos nombres. Volver a abrir el ZIP original con la codificación correcta es más rápido que renombrar después, y no se escapa ninguno.
La solución: volver a abrirlo con la codificación correcta
Lo más sencillo es volver a abrir el archivo en una herramienta que permita elegir la codificación de los nombres. El extractor de ZIP de piclab detecta automáticamente la codificación de los nombres japoneses de un ZIP y, si aun así se ven mal, permite elegir Shift_JIS, GBK u otra codificación en el ajuste de codificación de los nombres de archivo. Selecciona los archivos y guárdalos, y obtendrás un ZIP con los nombres corregidos. Todo ocurre dentro del navegador, así que los archivos nunca se envían fuera.
Si tienes instalado Python 3.11 o posterior, la orden estándar de zipfile también sirve. Según la documentación de Python, --metadata-encoding, añadida en la 3.11, fija la codificación con la que se leen los nombres sin indicador (no afecta a los nombres con indicador, en los que manda UTF-8).
python3 -m zipfile --metadata-encoding cp932 -l archive.zip
python3 -m zipfile --metadata-encoding cp932 -e archive.zip out/La primera línea lista el contenido para comprobar los nombres; la segunda extrae en out/. En octubre de 2026, con un ZIP creado con nombres en cp932, Python 3.14 mostró el archivo como Ä╩É^âèâXâg.txt sin la opción y como 写真リスト.txt con cp932. Si el que se desfigura es un ZIP en UTF-8 hecho en un Mac, usa utf-8 en lugar de cp932.
Para un ZIP en chino elige gbk, para uno en coreano cp949, y así sucesivamente: la codificación del sistema que lo creó. Si no estás seguro, guíate por la tabla de «Leer el desfigurado para encontrar la causa». El origen de la codificación se explica en la entrada del glosario Shift JIS.
Prevención: activar el indicador UTF-8 o usar nombres ASCII
Al crear un ZIP para alguien cuyo sistema no conoces, escribir los nombres de forma inequívoca le ahorra problemas.
- Crearlo con el indicador UTF-8: zipfile de Python escribe automáticamente en UTF-8 los nombres con caracteres no ASCII y activa el bit 11 (según la documentación y una prueba de octubre de 2026). Un ZIP creado con
python3 -m zipfile -c archive.zip 写真リスト.txtllevaba el indicador. Con el indicador presente, cualquier herramienta que siga la especificación lee UTF-8 sin adivinar - Usar nombres solo ASCII: si los nombres usan solo caracteres del rango ASCII, como
photo-2026-10-01.jpg, los bytes son los mismos en cualquier codificación y nada se desfigura. Los nombres formados por fecha y número, además, se ordenan bien - Probar antes de enviar de un Mac a Windows: como muestra la lista de «Windows y macOS escriben los nombres de forma distinta», las herramientas estándar de macOS escriben UTF-8 sin indicador. Antes de enviar, comprueba una vez que el archivo se abre en un sistema como el del destinatario, o cambia los nombres a ASCII antes de comprimir
Para pasar un lote de fotos a nombres ASCII antes de enviarlas, sirven los pasos de renombrado masivo de archivos de imagen. Los consejos para quien recibe en el móvil están en cómo abrir un ZIP con contraseña en el móvil.
Preguntas frecuentes: por qué 7z y RAR casi no desfiguran los nombres
¿También se desfiguran los nombres en 7z y RAR? Rara vez. 7-Zip incluye los nombres de archivo Unicode entre las características del formato 7z, y la descripción del formato RAR 5.0 de RARLAB establece que el campo del nombre en la cabecera de archivo está en UTF-8. 7z guarda los nombres en Unicode y los archivos RAR 5.0 fijan los nombres en UTF-8, así que los lectores no se dividen por un indicador como ocurre con ZIP.
¿El texto ilegible dentro de los archivos (texto o CSV) es el mismo problema? No. El apéndice D de APPNOTE indica que el bit 11 no dice nada sobre la codificación del contenido ni de la contraseña. Un CSV que se ve mal en Excel después de extraerlo tiene su propio problema de codificación, así que hay que indicar la codificación al importarlo.
¿Puede un ZIP guardar aparte una copia UTF-8 de cada nombre? Sí. El apéndice D de APPNOTE explica que Ed Gordon, del grupo Info-ZIP, definió un par de campos extra para guardar nombres y comentarios en UTF-8; el del nombre es el Header ID 0x7075, el Info-ZIP Unicode Path Extra Field. Así un archivo puede conservar el nombre en su codificación original y en UTF-8 sin activar el bit 11. El soporte depende de la herramienta: un ZIP creado con ditto en macOS 26.5 en octubre de 2026 no contenía ese campo.
¿Y si ya extraje con los nombres desfigurados? Si el ZIP original sigue ahí, extraerlo de nuevo con el método de «La solución: volver a abrirlo con la codificación correcta» es lo más seguro. Si el ZIP ya no existe, solo queda renombrar los archivos a mano.