Saat bekerja dengan seorang kolega saya menemukan masalah aneh yang tampaknya terkait dengan penyandian. Kami bekerja dengan beberapa gambar yang memiliki nama file yang cukup sederhana seperti city.gif
atau wine.gif
, tetapi seperti yang diharapkan hal mendapatkan lebih rumit ketika menggunakan karakter khusus seperti é
, ë
, à
. Kami juga bekerja dengan data Belanda yang memiliki karakter ini, misalnya café
( pub ). (Kami tidak memiliki kontrol atas asal file.) Di sinilah masalah mulai muncul. Nama file berikut hanyalah sebuah contoh. Masalah ini juga terjadi untuk karakter lain dengan diakritik.
café-2.png
cafetaria.png
café.png
Item pertama dan terakhir harus memiliki aksen e di sana (aksen aigu, é
). Begitulah yang ditunjukkan di Linux (CentOS 6 & 7) di terminal saat berjalan ls
. Tapi inilah Windows! (Menggunakan Windows 10, 64 bit.) Ketika terhubung pada Windows melalui SSL dengan server kami dan kemudian memanggil ls
, daftar di atas terlihat seperti ini:
café-2.png
cafetaria.png
caf▒.png
Seperti yang mudah-mudahan Anda lihat, baris pertama masih memiliki aksen e é
, tetapi yang ketiga tidak. Sebagai gantinya, saya melihat ▒
karakter ini - yang berada medium shade
dalam unicode (9618 desimal). Ini aneh dalam dirinya sendiri. Namun, ketika saya terhubung melalui SFTP dengan Filezilla (masih di Windows) saya bisa melihat ini:
café-2.png
cafetaria.png
café.png
Jadi sekarang segalanya telah berbalik: yang pertama é
telah berubah menjadi urutan dan yang ketiga semuanya baik-baik saja. Saya menemukan di sini bahwa ini kemungkinan besar karena konversi Latin-1 <-> UTF-8 yang salah, jika saya melakukannya dengan benar. Tapi itu tidak semua yang terjadi, bukan?
Linux menunjukkan segalanya seperti yang kita harapkan, Windows menunjukkan perilaku yang tampaknya tidak konsisten tergantung pada cara kita melihat nama file (SSH (dempul), atau SFTP (filezilla)). Apakah ada cara untuk 'menormalkan' nama-nama file ini - yaitu mengeditnya -, dan memastikan semuanya sama pada setiap OS; atau paling tidak konsisten, dan jika demikian, bagaimana? UTF-8
adalah pengkodean pilihan kami.
Meskipun ini mungkin sama hanya masalah estetika, itu tidak sama. Ketika mencoba mengunduh berbagai hal melalui SFTP di Windows dari server Linux kami, saya tidak dapat mengunduh file yang memiliki masalah yang disebutkan di atas. Filezilla akan melempar kesalahan seperti Can't download file café-2.png: café-2.png does not exist on the server
. Yang menurut saya Filezilla membaca direktori dan nama file, menafsirkannya dalam beberapa pengkodean, mengirimkan permintaan GET ke server dengan interpretasinya, tetapi interpretasi itu berbeda dari nama file Linux sehingga akibatnya file tidak ditemukan.
Pada akhirnya akan lebih baik jika ada solusi yang tersedia, meskipun saya juga tertarik mengapa ini terjadi. Apakah ini terjadi karena file gambar mungkin dibuat pada Sistem Operasi yang berbeda? Apakah ini terjadi karena server Linux mengartikan mereka salah, atau apakah Windows mengacaukannya? Mudah-mudahan ada solusi di mana kita bisa langsung menghubungi sysadmin kita dan meminta mereka untuk menghidupkan sakelar di server konfigurasi, tapi aku khawatir itu tidak semudah itu.
python -c "import sys; print(repr(sys.argv[1]))" café-2.png
dan python -c "import sys; print(repr(sys.argv[1]))" café.png
?