2012-03-02 3 views
12

파일을 FTP 서버에 업로드해야합니다. 파일 이름에 특수 문자 (예 : äöü)가 포함되어 있습니다. FTP 서버에서 파일 이름을 UTF-8로 인코딩해야합니다.Apache Commons Net FTPClient의 파일 이름 인코딩

내 코드는 다음과 같다 :

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

FTPClient client = new FTPClient(); 

... 

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

문제는 storeFile 후, FTP 서버에 저장된 파일의 이름이 UTF-8이 아닌 인코딩 된 ISO-8859-1 것입니다.

FTPClient에 UTF-8로 파일 이름을 인코딩한다고 어떻게 알 수 있습니까?

+1

잘못된 장소를 찾고 있다고 말하고 싶습니다. FTP 서버의 구성 일 수 있습니다. – Marcelo

+1

반드시 그렇지는 않습니다. 원래의 FTP 프로토콜 스펙은 유니 코드를 전혀 지원하지 않았습니다. FTP 연결을 통해 UTF-8을 사용하려면 먼저 양측이 먼저 사용에 동의해야합니다. 서버는 'FEAT' 명령으로 UTF-8을 지원한다고보고해야합니다 (RFC 2640 참조, 모든 서버가 해당 사양을 지원하지는 않습니다). 일부 서버는 클라이언트가 UTF-8을 활성화하기 위해 비표준'OPTS UTF8 ON' 또는'OPTS UTF-8 NLST' 명령을 보내도록 요구합니다. $ 1M의 질문입니다. FTPClient가 무엇을 지원하고 서버가 무엇을 지원합니까? WareShark와 같은 패킷 스니퍼를 사용하여 FTP 트래픽을보고 볼 수 있습니다. –

답변

24

나는 그것을 테스트하지 않은,하지만 당신은 this을 시도 할 수 있습니다 : 아파치 커먼즈 NET 3.0 하나의 FTP 서버에 UTF-8 지원의 자동 검색을 가능하게 ftpClient.setAutodetectUTF8(true);을 사용할 수 있습니다

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

예, setControlEncoding이 맞습니다. 그러나 연결 전에 setControlEncoding을 호출하는 것이 중요합니다. 그렇지 않으면 작동하지 않습니다. 사실이 라이브러리의 불행한 디자인이라고 생각합니다. http://yaseb.wordpress.com/2012/03/07/apache-commons-unfortunate-design-of-ftpclient/도 참조하십시오. – gefei

6

입니다. setControlEncoding처럼 연결하기 전에 호출해야합니다.

해당 javadoc을 참조하십시오.

관련 문제