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?
character-encoding
zip
unicode
file-format
einpoklum
sumber
sumber
Jawaban:
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
LANG
variabel lingkungan) dan kode-kode Windows kemungkinan tidak termasuk di dalamnya .unzip -UU
harus 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
convmv
alat 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
iconv
danfind
memindahkan semuanya ke nama yang benar. Sesuatu seperti: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.sumber
rar
ataup7zip
menolak untuk menangani arsip .zip. Apakah ada cara untuk mengekstrak arsip dengan nama file dalam penyandian eksklusif, di Linux? Ketika saya mengekstrak denganunzip
, saya mendapatkan kesalahan: "error: tidak dapat membuat ╨и╨╕╨┐ / Ship_╨п ╨Я╤А╨╛╤З╨╗╨░ ╨Я╤А╨╛ ╨н╤В╨╛ ╨ ▓╨Ю╨┤╨╜╨╛╨╣ ╨Ъ╨╜╨╕╨╢╨║╨╡! .Png Nama file terlalu panjang "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?unzip -UU foo.zip
bekerja untuk karakter TurkiSaya sukses dengan perintah itu
7z x <source.zip>
.Versi: kapan:
Lingkungan yang berpotensi relevan:
Itu bisa mendekompres semua file dengan karakter 8-bit dalam nama file mereka, dengan beberapa karakter dilewati, beberapa kacau.
sumber
Saya baru saja mengalami masalah yang sama, dan ternyata versi saya
unzip
yang 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-a
sakelar.sumber
unzip
manual-a
switch, Anda perlu mengkonversi file teks. Bukan nama file.Saya memiliki masalah yang sama dengan decoding arsip zip dengan karakter cyrillic. Skrip python satu baris melakukan pekerjaan dengan benar:
Kemudian panggil saja
unzip_enc
dan panggil sajaunzip_enc ZIP_FILE [TARGET_DIR]
Bagi saya
unzip -UU
, variabel lingkungan ,unzip -a
atauLANG*
tidak ada gunanya.sumber
Saya beruntung dengan kombinasi ini:
tambahkan --notest ke convmv untuk rename aktual. Kemudian saya menemukan versi yang lebih baik:
sumber
LANG
variabel dan dari pengkodean tergantung pada file yang ada. Saya punya file tempat bekerjaLANG=ru_RU.CP1251
bersama-f cp866
.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.
sumber