2016-08-15 84 views
2

我打开连接前,使用apache的commons-net 3.5将文件上传到远程FTP服务器,并将连接编码设置为UTF-8,如下所示。FTP文件上传 - 文件名编码错误

ftpClient.setAutodetectUTF8(true); 
ftpClient.setControlEncoding("UTF-8"); 

这是发送文件

private void uploadFile(byte[] data, String path, String fileName, FTPClient ftpClient) throws IOException { 
    ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); 
    ftpClient.setFileTransferMode(FTPClient.BINARY_FILE_TYPE); 
    boolean uploadSuccess = ftpClient.storeUniqueFile(fileName, new ByteArrayInputStream(data)); 

这里的部分是问题;当发送名称中包含土耳其语字符的文件时,结果文件名称不正确。像,

Kimlikş.pdf -> KimlikÅ.pdf 

但是,如果我使用ftp4j,一切工作正常。有没有人有过这个?数据从我的身边不正确地运送。我使用Microsoft Network Monitor监控流量。这里是原始请求:

FTP FTP:Request from Port 62642,'STOR KimlikÅ.pdf' {TCP:5879, IPv4:134} 
+0

确保您在任何地方都使用适当的字符集,特别是在远程系统上。如果远程文件系统(比如说)使用win-1252,则从客户端发送UTF-8文件名是没有意义的。 –

+0

'ftpClient.setCharset(StandardCharsets.UTF_8);' –

+0

@Mark,我在服务器端也使用了相同的字符集。 –

回答

0

我想有一个与Apache的公网中的错误,所以我迁移到ftp4j,问题是没有。

<dependency> 
    <groupId>it.sauronsoftware</groupId> 
    <artifactId>ftp4j</artifactId> 
    <version>1.6</version> 
</dependency>