Saya punya banyak file zip di mana ada kesalahan penyandian untuk umlaut Jerman (äüöÄÜÖß). Mereka muncul di filename.zip serta di direktori dan file yang disertakan seperti ini:
- Fünf = Fu╠ênf
- Räuber = Ra╠êuber
- Überfall = U╠êberfall
dan seterusnya. Biasanya saya menggunakan Linux, tetapi karena masalah ini saya juga mencoba VM Windows7 tetapi hasilnya di encoding yang sama berantakan. Di Linux saya bermain-main dengan convmv dan detox, tetapi tidak berhasil.
Saat saya gunakan
- convmv -f iso-8859-1 -t utf8 --replace --notest -r *
Saya mendapatkan "Melewati, sudah UTF-8".
Ada pemikiran tentang ini?
find -type f -print0 |xargs -r -n1 -0 convmv -f WINDOWS-1252 -t UTF-8 --notest
Ini menemukan file dari direktori saat ini maju dan menjalankan convmv secara terpisah pada setiap file. Nama file di-encoed sebagai daftar nullterminated.Jawaban:
Alasan Anda mendapatkan peringatan "sudah UTF-8" adalah bahwa string tersebut benar-benar sudah ada di UTF-8. Karakter "ü" dikodekan dengan gaya OSX sebagai 'u' diikuti oleh dua byte "\ xCC" dan "\ x88". Dua byte ini bersama-sama membentuk representasi UTF-8 dari \ u0308, yang menggabungkan diaeresis.
Jika Anda melihat halaman kode 437 yang tercantum di sini , Anda akan melihat karakter \ xCC sebagai "╠" dan karakter \ x88 sebagai "ê".
Apa pun yang Anda gunakan untuk menampilkan urutan karakter tersebut tidak menafsirkannya sebagai UTF-8 melainkan sebagai CP437.
Bukti cepat, jika Anda membaca ruby, yang ditampilkan seperti yang diharapkan di terminal UTF-8 saya:
sumber
Dugaan saya adalah sistem file yang Anda coba dekompresi atau memanipulasi file. FAT32 tidak akan menyukai umlaut Anda. Cobalah menyalin file-file ini dari flash drive (atau apa pun yang Anda miliki) dan kemudian mendekompres file zip untuk melihat karakter apa yang dihasilkan oleh nama file.
Baik NTFS (Windows) dan Ext4 (Mint) seharusnya tidak memiliki masalah dengan pengkodean nama.
Pengkodean nama file zip sendiri pada sistem FAT32 kemungkinan besar tidak akan berubah atau diperbaiki ketika Anda menyalinnya ke sistem file suporting yang tepat, tetapi subdirektori ketika dekompresi harus baik-baik saja.
sumber
Catatan pertama bahwa pengkodean karakter adalah bagian neraka sendiri. Di dunia Windows masih ada dualisme buruk antara UTF-8 dan M $ bermain bodoh untuk waktu yang lama dan bersikeras ISO-8859 (tebak siapa yang datang dengan itu). Seperti disebutkan di atas hampir pasti ada hubungannya dengan sistem file. Solusi saya bukan solusi teknis, tetapi solusi yang telah bekerja untuk saya selama bertahun-tahun sekarang:
Saran pribadi saya untuk nama file selalu sama: Cukup gunakan alfanumerik plus tanda hubung (-) dan garis bawah (_). Tulis umlaute sebagai ae, ue dan oe. Jangan gunakan spasi dan karakter khusus lainnya. Awalnya sedikit tidak nyaman, tetapi itu akan menyelamatkan Anda dari banyak rasa sakit di tempat-tempat yang tidak terduga.
Sebagai catatan: ya ini semacam "retas" yang jahat, tetapi jika Anda bekerja lintas platform, Anda sering harus kembali ke penyebut umum terakhir. Anda akan menerima begitu saja bahwa sesuatu dasar seperti pengkodean karakter akan menjadi standar yang sulit, tetapi ternyata standar adalah hal yang sulit didapat. Ini XKCD summes itu cukup baik
sumber