masalah pengodean nama file

9

Saya mendapatkan file dengan nama Faroese dan mencoba menyimpannya dalam skrip PHP:

2010_08_Útflutningur.xls

Di Ubuntu 10,04 LTS menyimpannya sebagai:

2010_08_�tflutningur.xls (invalid encoding)

Saya sudah menginstal dan menjalankan utf8-migration-tool, tetapi tanpa efek.

Apakah ini kesalahan Ubuntu yang bisa saya perbaiki atau saya harus menyerah dan memodifikasi nama di php?

Apakah ada dokumen yang menyatakan charset apa yang dapat diterima untuk nama file di Ubuntu, atau apa saja spesifikasi pengkodeannya?

Terima kasih

Elzo Valugi
sumber
Bagaimana Anda menerima dan menyimpan file melalui PHP? (Seperti apa kode itu?)
Kees Cook
Saya menguraikannya dari sistem email. Kode ini rumit :)
Elzo Valugi
Ada T&J serupa dengan skrip untuk memperbaiki nama file yang rusak.
lumbric

Jawaban:

5

Ini terlihat seperti masalah penyandian. Sayangnya, PHP membutuhkan sedikit pegangan ketika datang ke pengkodean, karena string-nya adalah byte tunggal secara default. Jika Anda membuat nama file dalam PHP, utf8_encode()seharusnya membantu; Perhatikan, bagaimanapun, itu mengasumsikan pengkodean ISO-8859-1 untuk input.

Di sisi lain, jika Anda menggunakan nama file yang dikirimkan oleh klien, mungkin Anda dapat meminta klien melakukan pengkodean untuk Anda. Itu dilakukan dengan accept-charsetatribut <form>tag, dan / atau dengan mengatur charset halaman tempat formulir aktif. Klien tertentu dapat menggunakan satu atau yang lain, jadi untuk hasil terbaik gunakan UTF-8 untuk masing-masing.

Eswald
sumber
7

Secara default Ubuntu menggunakan UTF-8 untuk nama file. Kebanyakan distro linux modern dan banyak sistem operasi lain melakukannya (Windows / NTFS adalah pengecualian yang paling dikenal dengan UTF-16).

Untuk memperbaiki file yang memiliki nama dalam penyandian yang salah seperti yang Anda tampilkan, Anda dapat mencoba menggunakannya nautilus-filename-repairer

sudo apt-get install nautilus-filename-repairer

Anda dapat menggunakan iconvfungsi PHP untuk mengonversi string (nama file) dari satu penyandian ke penyandian lainnya. Tentu saja itu mengharuskan Anda tahu pengkodean apa yang mereka mulai.

Untuk mendapatkan nama file yang disandikan dengan benar dari klien, Anda dapat mencoba teknik yang dijelaskan oleh eswald.

JanC
sumber