2012-03-02 25 views
12

Bir FTP sunucusuna dosya yüklemem gerekiyor. Dosya adı özel harfler içerir, äöü deyin. FTP sunucusunda, UTF-8 kodlu olmak için dosya adına ihtiyacım var.Apache Commons Net FTPClient içinde dosya adı kodlaması

Benim kod şu şekildedir:

import org.apache.commons.net.ftp.FTPClient; 

FTPClient client = new FTPClient(); 

... 

boolean retval = client.storeFile(fileName, inputStream); 

sorun storeFile sonra, FTP sunucusuna kaydedilir dosyanın adı UTF-8 yerine kodlanmış ISO-8859-1 olmasıdır.

Dosya adlarını UTF-8 kodlaması için FTPClient nasıl söyleyebilirim?

+1

Yanlış yere baktığınızı söyleyebilirim, bu muhtemelen FTP sunucusunda bir yapılandırmadır ... – Marcelo

+1

Mutlaka değil. Orijinal FTP protokolü özellikleri hiç Unicode'u desteklemedi. Bir FTP bağlantısı üzerinden UTF-8'i kullanabilmek için, her iki tarafın da ilk önce kullanımını kabul etmesi gerekir. Sunucu, "FEAT" komutunda UTF-8'i desteklediğini rapor etmelidir (tüm sunucular bu özellikleri desteklemese de RFC 2640'a bakın). Bazı sunucular istemcilerin UTF-8'i etkinleştirmek için standart olmayan 'OPTS UTF8 ON' veya' OPTS UTF-8 NLST' komutlarını göndermesini gerektirir. Yani bu 1 milyon dolarlık soru - FTPClient'in desteği nedir ve sunucu ne destekler? FTP trafiğini izlemek ve görmek için WareShark gibi bir paket dinleyicisi kullanırdım. –

cevap

24

bunu test etmedim ama this deneyebilirsiniz: Apache Commons NET 3.0 bir FTP sunucusu UTF-8 desteği autodetection etkinleştirmek için ftpClient.setAutodetectUTF8(true); kullanabilirsiniz

client.setControlEncoding("UTF-8"); 
+5

Evet, setControlEncoding doğru. Ancak, bağlantıdan önce setControlEncoding çağırmak önemlidir, aksi takdirde işe yaramıyor. Bunun aslında kütüphanenin talihsiz bir tasarım olduğunu düşünüyorum, ayrıca bkz. Http://yaseb.wordpress.com/2012/03/07/apache-commons-unfortunate-design-of-ftpclient/ – gefei

6

beri. setControlEncoding gibi, bağlantıdan önce çağrılmalıdır.

İlgili javadoc'a bakın.

İlgili konular