Catatan awal:
-
sftp harus gunakan UTF-8 sebagai pengkodean nama file (misalnya, lihat di sini sebagai referensi). Namun, ada klien dan server yang tidak mengikuti persyaratan tersebut dan melanggar spesifikasi, yang mungkin menjadi penyebab masalah Anda.
-
Anda menulis:"Perhatikan bahwa saya telah berkomentar:AcceptEnv LANG LC_*. Menurut di sini, ini berarti server tidak akan mengizinkan klien untuk meneruskan variabel lingkungan lokal."
Mungkin ada kesalahpahaman tentang bagaimana ini bekerja dan apa manfaatnya. Setiap kali dua mesin berkomunikasi, mereka harus menggunakan format data yang sama. Misalnya, VisualCron menempatkan nama file yang dikodekan sebagai ISO 8859-1 ke dalam aliran byte yang dikirimkannya ke server Ubuntu, tetapi Anda memaksa server Ubuntu untuk menginterpretasikan aliran byte yang masuk (nama file) seolah-olah dikodekan dalam UTF- 8. Itu tidak akan menyelesaikan masalah, tetapi menyebabkan mereka.
Setelah mengatakan ini:
Saya pertama-tama akan mencoba mencari tahu di mana tepatnya masalah itu muncul. Saya sangat berasumsi bahwa Anda memiliki akses SSH atau bahkan akses fisik (keyboard) ke server Ubuntu. Lalu
-
Periksa apakah lokal
en_US.UTF-8
diinstal pada server Ubuntu sama sekali. Harap dicatat bahwa hanya mengaturLC_
danLANG
variabel lingkungan tidak instal lokal.Sebagai gantinya, Anda akan menginstal lokal selama instalasi O/S atau dengan sesuatu seperti
dpkg-reconfigure locales
(di debian - saya tidak tahu Ubuntu). -
Jika menggunakan SSH, pastikan software terminal SSH Anda (mis. Putty) menggunakan enkode yang sama dengan server.
-
Kemudian, langkah yang paling penting:Menggunakan terminal SSH Anda, secara manual buat file dengan nama bermasalah di direktori masing-masing sehingga klien sftp di laptop Windows Anda dapat melihatnya.
Misalnya, kembali ke pertanyaan Anda, Anda dapat membuat file dengan nama
Liège.txt
di/tickets
Anda direktori (touch /tickets/Liège.txt
). Sekali lagi menggunakan terminal SSH Anda, periksa kembali dengan hati-hati apakah nama file muncul dengan benar ketika Anda membiarkan Ubuntu mencantumkan file di direktori itu (ls -al /tickets
). -
Sekarang gunakan klien sftp di laptop Windows Anda dan periksa apakah klien mengunduh file yang baru dibuat dengan benar.
Jika ini berhasil, itu berarti masalah Anda muncul saat VisualCron mentransfer file ke server Ubuntu. Jika tidak berhasil, masalahnya ada di antara laptop Windows Anda dan server Ubuntu.
Dalam kedua kasus tersebut, ada alat yang dapat membantu Anda menganalisis situasi.
Misalnya, Anda dapat memperoleh wawasan dari bermain-main dengan convmv, yang dapat mengonversi nama file dari satu penyandian ke penyandian lainnya. Khususnya, Anda dapat mengonversi penyandian nama file Anda dari UTF-8 ke UTF-8 . Ketika Anda melakukannya dan Anda yakin bahwa nama file sudah dikodekan dalam UTF-8, itu tidak boleh berubah selama konversi itu.
Anda mungkin juga ingin melihat chardet, yang merupakan pustaka Python yang mencoba menebak penyandian mis. nama file. Saya bukan orang Python, jadi saya tidak dapat membantu Anda dengan kode sumber. Menurut jawaban yang diterima untuk pertanyaan ini, Anda akan memiliki baris seperti chardet.detect(os.popen("ls yourfilename.txt").read())
dalam skrip Python Anda, yang akan menampilkan penyandian yang paling memungkinkan bersama dengan peringkat kepercayaan.
Untuk meringkas:
-
Pastikan bahwa nama file di server Ubuntu Anda benar-benar dikodekan dalam UTF-8, dengan mengikuti langkah-langkah yang ditampilkan di atas dan menggunakan alat yang disebutkan di atas.
-
Setelah Anda benar-benar yakin bahwa nama file di server Ubuntu Anda dikodekan dalam UTF-8, periksa apakah klien sftp di laptop Anda dapat mengunduhnya. Jika tidak, coba klien lain hingga berhasil.
-
Jika Anda menemukan bahwa tidak semua nama file di server Ubuntu dikodekan dalam UTF-8, sesuaikan pengaturan di VisualCron. Saya tidak tahu VisualCron dan karenanya tidak dapat membantu Anda.