Actualmente, tar codifica los nombres de archivo en UTF
En realidad, tar no codifica / decodifica nombres de archivos, simplemente los copia del sistema de archivos tal como está. Si su configuración regional está basada en UTF-8 (como en muchas distribuciones modernas de Linux), será UTF-8. Desafortunadamente, la página de códigos del sistema de un cuadro de Windows nunca es UTF-8, por lo que los nombres siempre se modificarán, excepto en herramientas como WinRAR que permiten cambiar el juego de caracteres.
Por lo tanto, es imposible crear un archivo ZIP con nombres de archivo que no sean ASCII que funcionen en las versiones de Windows de diferentes países y su compatibilidad con carpetas comprimidas incorporadas.
Es una deficiencia de los formatos tar y zip que no haya información de codificación fija o suministrada, por lo que los caracteres no ASCII siempre serán no portables. Si necesita un formato de archivo que no sea ASCII, deberá usar uno de los formatos más nuevos, como el reciente 7z o rar. Lamentablemente, estos todavía son inestables; en 7zip necesita el -mcu
interruptor, y rar todavía no usará UTF-8 a menos que detecte caracteres que no están en la página de códigos.
Básicamente es un desastre horrible y si puede evitar distribuir archivos que contengan nombres de archivos con caracteres que no sean ASCII, estará mucho mejor.
Aquí hay un script simple de Python que he escrito para descomprimir archivos tar de UNIX en Windows:
fuente
El problema, al usar en Linux el valor predeterminado
tar
(GNU tar), se resuelve ... agregando el--format=posix
parámetro al crear el archivo.Por ejemplo:
tar --format=posix -cf
En Windows, para extraer los archivos, uso bsdtar .
En https://lists.gnu.org/archive/html/bug-tar/2005-02/msg00018.html está escrito (¡desde 2005 !):
PD: en lugar de escribir
--format=posix
, puede escribir-H pax
, que es más corto.fuente
Creo que tienes problemas con el formato del contenedor Zip. El alquitrán puede estar sufriendo el mismo problema.
Utilice los formatos de archivo 7zip (
.7z
) o RAR (.rar
) en su lugar. Ambos están disponibles para Windows y Linux; Elp7zip
software maneja ambos formatos.Acabo de probar la creación de
.7z
,.rar
,.zip
, y.tar
archivos tanto WinXP y Debian 5, y el.7z
y.rar
los archivos / restaurar almacén de nombres de archivo correctamente mientras que el.zip
y.tar
los archivos no. No importa qué sistema se use para crear el archivo de prueba.fuente
Tuve problemas con el desempaquetado
tar
y loszip
archivos que recibo de los usuarios de Windows. Si bien no contesto la pregunta "cómo crear el archivo que funcionará", los siguientes scripts ayudan a descomprimirtar
yzip
archivar correctamente independientemente del sistema operativo original.ADVERTENCIA: uno tiene que sintonizar la fuente que codifica manualmente (
cp1251
,cp866
en los ejemplos a continuación). Las opciones de línea de comandos pueden ser una buena solución en el futuro.Alquitrán:
Cremallera:
UPD 2018-01-02 : uso el
chardet
paquete para adivinar la codificación correcta de la porción de datos sin procesar. Ahora el script funciona de forma predeterminada en todos mis archivos malos, así como en los buenos.Cosas a tener en cuenta:
chardet
no funciona con un objeto unicode normal).Versión final:
fuente
POSIX-1.2001 especificó cómo TAR usa UTF-8.
A partir de 2007, la versión 6.3.0 del registro de cambios en PKZIP APPNOTE.TXT ( http://www.pkware.com/documents/casestudies/APPNOTE.TXT ) especificó cómo ZIP usa UTF-8.
Es solo qué herramientas soportan estos estándares adecuadamente, eso sigue siendo una pregunta abierta.
fuente