Saat ini, tar menyandikan nama file di UTF
Sebenarnya tar tidak menyandikan / mendekode nama file sama sekali, itu hanya menyalinnya dari sistem file apa adanya. Jika lokal Anda berbasis UTF-8 (seperti pada banyak distro Linux modern), itu akan menjadi UTF-8. Sayangnya sistem codepage dari kotak Windows tidak pernah UTF-8, jadi nama-nama akan selalu hancur kecuali pada alat-alat seperti WinRAR yang memungkinkan charset yang digunakan untuk diubah.
Jadi tidak mungkin membuat file ZIP dengan nama file non-ASCII yang bekerja di berbagai rilis Windows dari berbagai negara dan dukungan folder terkompresi bawaan mereka.
Ini adalah kelemahan dari tar dan format zip yang tidak ada informasi pengkodean tetap atau disediakan, sehingga karakter non-ASCII akan selalu non-portabel. Jika Anda memerlukan format arsip non-ASCII, Anda harus menggunakan salah satu format yang lebih baru, seperti 7z atau rar terbaru. Sayangnya ini masih miring; di 7zip Anda memerlukan -mcu
sakelar, dan rar masih tidak akan menggunakan UTF-8 kecuali mendeteksi karakter yang tidak ada dalam codepage.
Pada dasarnya ini adalah kekacauan yang mengerikan dan jika Anda dapat menghindari mendistribusikan arsip yang berisi nama file dengan karakter non-ASCII Anda akan jauh lebih baik.
Berikut ini adalah skrip Python sederhana yang saya tulis untuk membongkar file tar dari UNIX di Windows:
sumber
Masalahnya, menggunakan Linux default
tar
(GNU tar), dipecahkan ... menambahkan--format=posix
parameter saat membuat file.Sebagai contoh:
tar --format=posix -cf
Di Windows, untuk mengekstrak file, saya menggunakan bsdtar .
Dalam https://lists.gnu.org/archive/html/bug-tar/2005-02/msg00018.html ditulis (sejak 2005 !!):
PS Alih-alih mengetik
--format=posix
Anda bisa mengetik-H pax
, yang lebih pendek.sumber
Saya yakin Anda mengalami masalah dengan format wadah Zip itu sendiri. Tar mungkin menderita masalah yang sama.
Gunakan format arsip 7zip (
.7z
) atau RAR (.rar
) sebagai gantinya. Keduanya tersedia untuk Windows dan Linux; yangp7zip
lunak menangani kedua format.Aku hanya diuji menciptakan
.7z
,.rar
,.zip
, dan.tar
file di kedua WinXP dan Debian 5, dan.7z
dan.rar
menyimpan file / mengembalikan nama file dengan benar sementara.zip
dan.tar
file tidak. Tidak masalah sistem mana yang digunakan untuk membuat arsip pengujian.sumber
Saya punya masalah dengan membongkar
tar
danzip
file yang saya terima dari pengguna Windows. Meskipun saya tidak menjawab pertanyaan "bagaimana cara membuat arsip yang akan berfungsi", skrip di bawah ini membantu membongkartar
danzip
file dengan benar terlepas dari OS aslinya.PERINGATAN: kita harus menyetel sumber encoding secara manual (
cp1251
,cp866
dalam contoh di bawah). Opsi baris perintah mungkin merupakan solusi yang baik di masa depan.Ter:
Zip:
UPD 2018-01-02 : Saya menggunakan
chardet
paket untuk menebak pengkodean yang benar dari data mentah. Sekarang skrip bekerja di luar kotak pada semua arsip buruk saya, serta yang baik.Hal yang perlu diperhatikan:
chardet
tidak berfungsi dengan objek unicode normal).Versi akhir:
sumber
POSIX-1.2001 menentukan bagaimana TAR menggunakan UTF-8.
Pada 2007, changelog versi 6.3.0 di PKZIP APPNOTE.TXT ( http://www.pkware.com/documents/casestudies/APPNOTE.TXT ) menetapkan cara ZIP menggunakan UTF-8.
Hanya alat mana yang mendukung standar ini dengan benar, yang tetap menjadi pertanyaan terbuka.
sumber