2012-03-02 11 views
12

मुझे एक फ़ाइल को एक FTP सर्वर पर अपलोड करना होगा। फ़ाइल नाम में विशेष पत्र हैं, äöü कहें। एफ़टीपी सर्वर पर, मुझे फ़ाइल नाम को यूटीएफ -8 एन्कोडेड होना चाहिए।अपाचे कॉमन्स में फ़ाइल नाम एन्कोडिंग नेट एफ़टीपी क्लाइंट

मेरे कोड इस तरह है:

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

FTPClient client = new FTPClient(); 

... 

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

समस्या यह है कि storeFile के बाद, FTP सर्वर पर सहेजी गई फ़ाइल का नाम ISO-8859-1 UTF-8 के बजाय इनकोडिंग है।

मैं यूटीएफ -8 को FTPClient फ़ाइल नामों को एन्कोड कैसे कर सकता हूं?

+1

मैं कहूंगा कि आप गलत जगह पर देख रहे हैं, यह शायद FTP सर्वर में एक कॉन्फ़िगरेशन है ... – Marcelo

+1

आवश्यक नहीं है। मूल एफ़टीपी प्रोटोकॉल spec यूनिकोड का समर्थन नहीं किया था। एक एफ़टीपी कनेक्शन पर यूटीएफ -8 का उपयोग करने के लिए, दोनों पार्टियों को पहले इसके उपयोग से सहमत होना है। सर्वर को 'FEAT' कमांड में रिपोर्ट करना है कि यह यूटीएफ -8 का भी समर्थन करता है (आरएफसी 2640 देखें, हालांकि सभी सर्वर उस स्पेक का समर्थन नहीं करते हैं)। कुछ सर्वरों को यूटीएफ -8 को सक्रिय करने के लिए ग्राहकों को गैर मानक 'ओपीटीएस यूटीएफ 8 चालू' या 'ओपीटीएस यूटीएफ -8 एनएलएसटी' कमांड भेजने की आवश्यकता होती है। तो यह $ 1 एम प्रश्न है - 'FTPClient' समर्थन क्या करता है, और सर्वर का समर्थन क्या करता है? मैं एफ़टीपी यातायात देखने और देखने के लिए, वेयरशर्क की तरह एक पैकेट स्निफर का उपयोग करूंगा। –

उत्तर

24

मैं इसे परीक्षण किया है, लेकिन आप this कोशिश कर सकते हैं:

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

हां, setControlEncoding सही है। हालांकि, कनेक्ट करने से पहले सेटकंट्रोल एन्कोडिंग को कॉल करना महत्वपूर्ण है, अन्यथा यह काम नहीं करता है। मुझे लगता है कि यह पुस्तकालय के दुर्भाग्यपूर्ण डिजाइन का एक टुकड़ा है, यह भी देखें http://yaseb.wordpress.com/2012/03/07/apache-commons-unfortunate-design-of-ftpclient/ – gefei

6

के बाद से अपाचे कॉमन्स नेट 3.0 एक FTP सर्वर पर UTF-8 समर्थन की autodetection सक्षम करने के लिए ftpClient.setAutodetectUTF8(true); उपयोग कर सकते हैं। setControlEncoding की तरह इसे कनेक्शन से पहले बुलाया जाना चाहिए।

संबंधित javadoc देखें।

संबंधित मुद्दे