Perbaiki penyandian umlaut Jerman di direktori dan nama file (ü = u╠ê dan sebagainya)


13

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?


Sistem antik apa yang Anda gunakan? Semua distribusi Linux saat ini menggunakan UTF-8 sekarang.
BatchyX

Mungkinkah ini masalah sistem file? Mungkin tidak dipasang di UTF?
terdon

Saya menggunakan Linux Mint 13 (berbasis Ubuntu 12.04 LTS dengan Kernel 3.2.0-23), jadi ini jauh dari antik. Dan seperti yang sudah saya tulis, saya juga mencoba file-file itu pada VM Windows 7. Tapi tentu saja saya tidak tahu apa yang membuat file zip yang digunakan.
sari

1
Pengkodean ini sepertinya semacam pengkodean DOS. Biasanya jika saya melihat masalah dengan pengkodean UTF8, umlaut Jerman terlihat seperti ä = ä atau Ü = Ãœ
sari

@cider try 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.
Manwe

Jawaban:


2

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:

$ ruby -e 'puts "u\xCC\x88"' | iconv -f cp437 -t utf-8
ü
$ ruby -e 'puts "u\xCC\x88"'
ü

0

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.


0

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


Saya muak dan lelah dengan masalah penyandian dalam nama file ketika saya mencoba (dan gagal) untuk menyinkronkan file antara Mac, Windows dan Linux (via Syncthing). Saya akan menyesuaikan saran Anda, namun dalam bahasa Turki ada ç, ş, ı, ğ, ü, ö, tidak nyaman untuk menulis dengan alfanumerik. Saya ingin berhenti menggunakan penyimpanan cloud tetapi masalah ini memaksa saya untuk melakukannya.
Teo
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.