Bagaimana saya bisa mendekompresi arsip ZIP file dengan nama Ibrani dengan benar?


18

Seseorang mengirimi saya file ZIP yang berisi file dengan nama Ibrani (dan dibuat di Windows, tidak yakin dengan alat yang mana). Saya menggunakan LXDE pada Debian Stretch. Manajer arsip Gnome berhasil membuka ritsleting file, tetapi karakter Ibrani kacau. Saya pikir saya mendapatkan oktet UTF-8 yang diperluas menjadi karakter Unicode, misalnya saya memiliki file yang namanya memiliki empat karakter dan kecukupan .doc, dan karakternya adalah: 0x008E 0x0087 0x008E 0x0085. Menggunakan utilitas unzip command-line bahkan lebih buruk - ia menolak untuk mendekompresi sama sekali, mengeluh tentang "Multibyte atau karakter lebar yang tidak lengkap atau tidak lengkap".

Jadi, pertanyaan saya adalah:

  • Apakah ada utilitas dekompresi lain yang akan mendekompres file saya dengan nama yang benar?
  • Apakah ada yang salah dengan cara file dikompresi, atau hanya ketidakcocokan implementasi ZIP? Atau bahkan kesalahan / bug dari utilitas ZIP Linux?
  • Apa yang bisa saya lakukan untuk mendapatkan nama file yang benar setelah didekompresi menggunakan yang rusak?

Jika Anda mencari byte tersebut di tabel cp862 apakah nama file cocok dengan yang Anda harapkan? Jika tidak, apakah Anda tahu penyandian asli mesin sumber?
Michael Homer

Ditto untuk cp1255 , dan penyandian yang masuk akal lainnya; adalah mungkin untuk menyelesaikannya berdasarkan apa yang tampak benar.
Michael Homer

@MichaelHomer: Tidak, sepertinya tidak cocok. Pengkodean asli mesin sumber adalah apa pun yang digunakan MS Windows saat Anda mengatur pengaturan regional ke bahasa Ibrani-Israel, jadi saya kira kadang-kadang UTF-8 dan kadang-kadang CP1255.
einpoklum

Jawaban:


15

Kedengarannya seperti nama file yang dikodekan dalam salah satu kode kepemilikan Windows ( CP862 , 1255 , dll).

  • Apakah ada utilitas dekompresi lain yang akan mendekompres file saya dengan nama yang benar? Saya tidak mengetahui adanya utilitas zip yang mendukung halaman kode ini secara asli. 7z memiliki beberapa pemahaman tentang penyandian, tetapi saya percaya ini harus merupakan penyandian yang diketahui oleh sistem Anda secara umum (Anda memilihnya dengan mengatur LANGvariabel lingkungan) dan kode-kode Windows kemungkinan tidak termasuk di dalamnya .

    unzip -UUharus bekerja dari baris perintah untuk membuat file dengan byte yang benar dalam namanya (dengan menonaktifkan semua dukungan Unicode). Mungkin itulah efek yang Anda dapatkan dari alat GNOME. Pengkodean tidak akan benar, tetapi kita dapat memperbaikinya di bawah ini.

  • Apakah ada yang salah dengan cara file dikompresi, atau hanya ketidakcocokan implementasi ZIP? Atau bahkan kesalahan / bug dari utilitas ZIP Linux? File yang Anda berikan tidak dibuat dengan mudah. Itu tidak selalu salah untuk penggunaan internal di mana pengkodean diperbaiki dan diketahui sebelumnya, meskipun spesifikasi format mengatakan bahwa nama-nama seharusnya UTF-8 atau cp437 dan Anda tidak. Bahkan di antara mesin Windows, menggunakan berbagai kode halaman tidak bekerja dengan baik, tetapi mesin non-Windows tidak memiliki konsep halaman kode tersebut untuk memulai. Sebagian besar alat UTF-8 menyandikan nama file mereka (yang masih tidak selalu cukup untuk menghindari masalah).

  • Apa yang bisa saya lakukan untuk mendapatkan nama file yang benar setelah didekompresi menggunakan yang rusak? Jika Anda dapat mengidentifikasi penyandian nama file, Anda dapat mengubah byte dalam nama yang ada menjadi UTF-8 dan memindahkan file yang ada ke nama yang tepat. The convmvalat dasarnya membungkus bahwa proses menjadi satu perintah: convmv -f cp862 -t utf8 -r .akan mencoba untuk mengkonversi segala sesuatu di dalam .dari cp862 ke UTF-8.

    Atau, Anda dapat menggunakan iconvdan findmemindahkan semuanya ke nama yang benar. Sesuatu seperti:

    find -mindepth 1 -exec sh -c 'mv "$1" "$(echo "$1" | iconv -f cp862 -t utf8)"' sh {} \;
    

    akan menemukan semua file di bawah direktori saat ini dan mencoba untuk mengubah nama menjadi UTF-8.

    Dalam kedua kasus tersebut, Anda dapat bereksperimen dengan penyandian yang berbeda dan mencoba menemukan yang masuk akal.


Setelah memperbaiki penyandian untuk Anda, jika Anda ingin mengirim file-file ini kembali ke arah yang lain, Anda mungkin memiliki masalah yang sama di ujung yang lain. Dalam hal ini, Anda dapat membalikkan proses sebelum zip file dengan -UU, karena itu mungkin sangat sulit untuk diperbaiki di Windows.


Saya kira ini harus dilakukan karena file ZIP yang saya cari sekarang hilang karena alasan yang tidak relevan di sini. Terima kasih, akan melakukan ini lain kali dan berharap yang terbaik.
einpoklum

1
raratau p7zipmenolak untuk menangani arsip .zip. Apakah ada cara untuk mengekstrak arsip dengan nama file dalam penyandian eksklusif, di Linux? Ketika saya mengekstrak dengan unzip, saya mendapatkan kesalahan: "error: tidak dapat membuat ╨и╨╕╨┐ / Ship_╨п ╨Я╤А╨╛╤З╨╗╨░ ╨Я╤А╨╛ ╨н╤В╨╛ ╨ ▓╨Ю╨┤╨╜╨╛╨╣ ╨Ъ╨╜╨╕╨╢╨║╨╡! .Png Nama file terlalu panjang "
Nickolai Leschov

Saya berhasil mengekstrak file .zip dengan benar LANG=ru_RU.CP1251; unzip Bleed.zip(itu adalah encoding Cyrillic dalam kasus saya). Sekarang saya bertanya-tanya bagaimana cara mengatur sistem saya sehingga saya dapat dengan benar membuka file .zip tersebut di GUI secara default?
Nickolai Leschov

@NickolaiLeschov Ajukan pertanyaan dan seseorang mungkin dapat membantu Anda. Anda mungkin perlu memberikan lebih banyak informasi tentang sistem Anda.
Michael Homer

unzip -UU foo.zipbekerja untuk karakter Turki
Mert S. Kaplan

8

Saya sukses dengan perintah itu 7z x <source.zip>.

Versi: kapan:

p7zip Version 16.02 (locale=utf8,Utf16=on,HugeFiles=on,64 bits,[...])

Lingkungan yang berpotensi relevan:

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
LC_CTYPE=UTF-8

Itu bisa mendekompres semua file dengan karakter 8-bit dalam nama file mereka, dengan beberapa karakter dilewati, beberapa kacau.


p7zip adalah satu-satunya yang bekerja untuk saya
alex88

6

Saya baru saja mengalami masalah yang sama, dan ternyata versi saya unzipyang tersedia dari repositori Ubuntu ( UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.) dapat menangani decoding nama file secara otomatis jika Anda menentukan -asakelar.

unzip -a stupid.zip

+1 walaupun saya tidak memiliki apa pun untuk menguji ini dengan sekarang.
einpoklum

1
Menurut halaman unzipmanual -aswitch, Anda perlu mengkonversi file teks. Bukan nama file.
beruic

@beruic, saya telah membuka ritsleting nomor unicode sebagai nama file (# U + 0040 # U + 0050 ...), dan kemudian "unzip -a" sangat membantu.
chang zhao

1
Saya mencoba ini di beberapa manga. Nama file diterjemahkan dengan benar, tetapi gambar juga ditafsirkan sebagai teks (!) Dan rusak sepenuhnya. Bahkan menafsirkan file zip dan rar di dalam arsip sebagai teks, deteksi sama sekali tidak berguna.
rjh

2

Saya memiliki masalah yang sama dengan decoding arsip zip dengan karakter cyrillic. Skrip python satu baris melakukan pekerjaan dengan benar:

#!/usr/bin/python

import zipfile
import sys

zipfile.ZipFile(sys.argv[1], 'r').extractall(sys.argv[2] if len(sys.argv) > 2 else '.')

Kemudian panggil saja unzip_encdan panggil sajaunzip_enc ZIP_FILE [TARGET_DIR]

Bagi saya unzip -UU, variabel lingkungan , unzip -aatau LANG*tidak ada gunanya.


Saya akan coba lain kali saya punya file zip untuk mengekstrak ... terima kasih. Tetapi - dapatkah Anda mengubah skrip Anda untuk: 1. memeriksa apakah ada dua argumen 2. mengekstrak ke direktori kerja saat ini jika hanya file zip yang disediakan?
einpoklum

2

Saya beruntung dengan kombinasi ini:

export LANG=es_MX 
7z x file.zip
convmv -f cp437 -t utf8 -r .

tambahkan --notest ke convmv untuk rename aktual. Kemudian saya menemukan versi yang lebih baik:

LANG=es_MX.cp437 unzip -UU file.zip
convmv -f cp437 -t utf8 -r . --notest

+1 hanya untuk convmv dan alat 7zip baris perintah.
einpoklum

Mungkin kita harus mencoba berbagai opsi untuk LANGvariabel dan dari pengkodean tergantung pada file yang ada. Saya punya file tempat bekerja LANG=ru_RU.CP1251bersama -f cp866.
Dmitri Chubarov

0

Saya memiliki arsip zip yang dikompres di Linux (dari baris perintah) dan nama file dengan karakter diakritik tidak didekompresi dengan benar pada Windows, tetapi saya berhasil membukanya dengan perangkat lunak Bandizip yang dapat mengatur charset pada toolbar.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.