Alguien me envió un archivo ZIP que contiene archivos con nombres hebreos (y creado en Windows, no estoy seguro con qué herramienta). Yo uso LXDE en Debian Stretch. El administrador de archivos de Gnome logra descomprimir el archivo, pero los caracteres hebreos son confusos. Yo creo que estoy recibiendo UTF-8 octetos extendidas en caracteres Unicode, por ejemplo, tengo un archivo cuyo nombre tiene cuatro caracteres y un suffic .doc, y los personajes son: 0x008E 0x0087 0x0085 0x008E. El uso de la utilidad de descompresión de la línea de comandos es aún peor: se niega a descomprimirse por completo, quejándose de un "carácter multibyte o ancho inválido o incompleto".
Entonces, mis preguntas son:
- ¿Hay otra utilidad de descompresión que descomprima mis archivos con los nombres correctos?
- ¿Hay algo mal con la forma en que se comprimió el archivo, o es solo una incompatibilidad de las implementaciones ZIP? ¿O incluso error / error de las utilidades ZIP de Linux?
- ¿Qué puedo hacer para obtener los nombres de archivo correctos después de haber descomprimido usando los ilegibles?
character-encoding
zip
unicode
file-format
einpoklum
fuente
fuente
Respuestas:
Parece que los nombres de los archivos están codificados en una de las páginas de códigos de propiedad de Windows ( CP862 , 1255 , etc.).
¿Hay otra utilidad de descompresión que descomprima mis archivos con los nombres correctos? No conozco una utilidad zip que admita estas páginas de códigos de forma nativa. 7z tiene cierta comprensión de las codificaciones, pero creo que tiene que ser una codificación que su sistema conozca de manera más general (la elige configurando la
LANG
variable de entorno) y las páginas de códigos de Windows probablemente no se encuentren entre ellas.unzip -UU
debería funcionar desde la línea de comandos para crear archivos con los bytes correctos en sus nombres (deshabilitando todo el soporte Unicode). Ese es probablemente el efecto que ya obtuvo de la herramienta de GNOME. La codificación no será correcta de ninguna manera, pero podemos solucionarlo a continuación.¿Hay algo mal con la forma en que se comprimió el archivo, o es solo una incompatibilidad de las implementaciones ZIP? ¿O incluso error / error de las utilidades ZIP de Linux? El archivo que le dieron no fue creado de forma portátil Eso no es necesariamente incorrecto para un uso interno donde la codificación es fija y conocida de antemano, aunque la especificación de formato dice que se supone que los nombres son UTF-8 o cp437 y los suyos tampoco. Incluso entre máquinas Windows, el uso de diferentes páginas de códigos no funciona bien, pero las máquinas que no son Windows no tienen un concepto de esas páginas de códigos para empezar. La mayoría de las herramientas UTF-8 codifican sus nombres de archivo (que todavía no siempre es suficiente para evitar problemas).
¿Qué puedo hacer para obtener los nombres de archivo correctos después de haber descomprimido usando los ilegibles? Si puede identificar la codificación de los nombres de archivo, puede convertir los bytes de los nombres existentes en UTF-8 y mover los archivos existentes al nombre correcto. La
convmv
herramienta esencialmente resume ese proceso en un solo comando:convmv -f cp862 -t utf8 -r .
intentará convertir todo dentro.
de cp862 a UTF-8.Alternativamente, puede usar
iconv
yfind
mover todo a sus nombres correctos. Algo como:encontrará todos los archivos debajo del directorio actual e intentará convertir los nombres en UTF-8.
En cualquier caso, puede experimentar con diferentes codificaciones e intentar encontrar una que tenga sentido.
Después de que haya arreglado la codificación por usted, si desea enviar estos archivos de vuelta en la otra dirección, es posible que tenga el mismo problema en el otro extremo. En ese caso, puede revertir el proceso antes de comprimir los archivos
-UU
, ya que es probable que sea muy difícil solucionarlo en Windows.fuente
rar
op7zip
negarse a manejar archivos .zip. ¿Hay alguna manera de extraer un archivo con nombres de archivo en codificaciones propietarias, en Linux? Cuando extraigo conunzip
, obtengo un error: "error: no se puede crear ╨и╨╕╨┐ / Ship_╨п ╨Я╤А╨╛╤З╨╗╨ ° ╨Я╤А╨╛ ╨н╤В╨╛ ╨ ▓╨Ю╨┤╨╜╨╛╨╣ ╨Ъ╨╜╨╕╨╢╨║╨╡! .Png Nombre de archivo demasiado largo "LANG=ru_RU.CP1251; unzip Bleed.zip
(fue codificación cirílica en mi caso). Ahora me pregunto cómo configuro mi sistema para poder abrir correctamente dichos archivos .zip en la GUI de forma predeterminada.unzip -UU foo.zip
trabajó para los personajes turcosTuve éxito con el comando
7z x <source.zip>
.Versión:
Entorno potencialmente relevante:
Fue capaz de descomprimir todos los archivos con caracteres de 8 bits en sus nombres de archivo, con algunos de estos caracteres omitidos, algunos confusos.
fuente
Acabo de tener el mismo problema, y resulta que mi versión de
unzip
eso está disponible en los repositorios de Ubuntu (UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.
) puede manejar la decodificación automática de nombres de archivos si especificas el-a
interruptor.fuente
unzip
la-a
conmutación se encarga de la conversión de archivos de texto. No nombres de archivo.Tuve un problema similar con la decodificación de un archivo zip con caracteres cirílicos. Un script de python de una línea hizo el trabajo correctamente:
Entonces solo llámalo
unzip_enc
y llámalounzip_enc ZIP_FILE [TARGET_DIR]
Para mí
unzip -UU
,unzip -a
niLANG*
las variables de entorno ni las de nada sirvieron.fuente
Tuve suerte con esta combinación:
agregue --notest a convmv para cambiar el nombre real. Más tarde encontré una versión aún mejor:
fuente
LANG
variable y de codificación en función del archivo en cuestión. Tengo un archivo dondeLANG=ru_RU.CP1251
junto con-f cp866
trabajado.Tengo el archivo comprimido comprimido en Linux (desde la línea de comandos) y los nombres de archivo con caracteres diacríticos no se descomprimen correctamente en Windows, pero lo descomprimí con éxito con el software Bandizip que puede establecer el juego de caracteres en la barra de herramientas.
fuente