Apakah ini tergantung pada sistem file apa yang saya gunakan? Sebagai contoh, ext2 / ext3 / ext4 tetapi juga apa yang terjadi ketika saya memasukkan salah satu CD-ROM "joliet" dengan ISO 9660? Saya pernah mendengar bahwa POSIX berisi semacam spesifikasi untuk pengkodean nama file charset?
Pada dasarnya, apa yang saya pikirkan adalah jika saya mendapatkan nama file yang dikodekan UTF-8, pengolahan / peliputan apa yang perlu saya lakukan sebelum saya meneruskannya ke file I / O API di Linux?
filenames
character-encoding
locale
martin
sumber
sumber
Jawaban:
Seperti dicatat oleh orang lain, sebenarnya tidak ada jawaban untuk ini: nama file dan jalur tidak memiliki penyandian; OS hanya menangani urutan byte. Aplikasi individual dapat memilih untuk menafsirkannya sebagai dikodekan dalam beberapa cara, tetapi ini bervariasi.
Secara khusus, Glib (digunakan oleh aplikasi Gtk +) mengasumsikan bahwa semua nama file dikodekan UTF-8, terlepas dari lokal pengguna . Ini mungkin ditimpa dengan variabel lingkungan G_FILENAME_ENCODING dan G_BROKEN_FILENAMES .
Di sisi lain, Qt default untuk mengasumsikan bahwa semua nama file dikodekan dalam lokal pengguna saat ini . Aplikasi individual dapat memilih untuk mengesampingkan asumsi ini, meskipun saya tidak tahu ada yang melakukannya, dan tidak ada sakelar penggantian eksternal.
Distribusi Linux modern diatur sedemikian rupa sehingga semua pengguna menggunakan lokal UTF-8 dan jalur pada mount sistem file asing diterjemahkan ke UTF-8, sehingga perbedaan dalam strategi ini umumnya tidak berpengaruh. Namun, jika Anda benar-benar ingin aman, Anda tidak dapat mengasumsikan struktur apa pun tentang nama file di luar "diakhiri NUL, '/' - urutan byte yang dibatasi".
(Perhatikan juga: lokal dapat bervariasi menurut proses. Dua proses berbeda yang dijalankan oleh pengguna yang sama mungkin berada di lokasi yang berbeda hanya dengan mengatur variabel lingkungan yang berbeda.)
sumber
'\x2F'
terlepas dari apa yang tampak/
. Sangat berbeda dalam SJIS.Lapisan unix / posix dari linux tidak peduli pengkodean mana yang Anda gunakan. Ini menyimpan urutan byte dari encoding Anda saat ini apa adanya.
Saya pikir opsi-opsi mount ada untuk membantu Anda mengonversi filesystem tertentu yang mendefinisikan charset ke charset sistem Anda. (CDROM, NTFS dan varian FAT menggunakan beberapa varian unicode).
Saya berharap unix mendefinisikan sistem pengkodean global, tetapi sebenarnya ini adalah pengaturan per pengguna. Jadi, jika Anda mendefinisikan penyandian berbeda maka kolega Anda, nama file Anda akan muncul secara berbeda.
sumber
Tergantung bagaimana Anda me-mount sistem file, lihat saja opsi mount untuk berbagai sistem file di
man mount
. Misalnyaiso9660
,vfat
danfat
memilikiiocharset
danutf8
opsi.sumber