上传包含拉丁字符的文件

时间:2015-11-11 11:18:04

标签: java ftp ftp-client apache-commons-net

我正在使用最新的Apache Commons Net来使用FTP功能。

我的目标是上传CSV文件(基于;),其中可能包含拉丁字符,例如ñ,á或Ú。问题是,当我将它们上传到FTP服务器时,这些字符会转换为另一个字符。

以下一行:

  

12345678A;伊尼戈;PÉREZ;JIMÉNEZ; X

变成了这个:

  

12345678A;IÃ'IGO;PÉREZ;岛‰NEZ; X

我的代码似乎是这样的:

   // pFile is passed as parameter to the current method
   InputStream is = new FileInputStream(pFile);
   ftp.setFileType(FTP.BINARY_FILE_TYPE);
   ftp.setControlEncoding("UTF-8");
   if (ftp.storeFile("some\\path", is)) {
       is.close();
       ...
   }

我花了几个小时才找到解决方案(我认为setFileType()和/或setControlEncoding()会起作用),但是没有...

我尝试打印到标准输出(屏幕,带有logger和System.out),我意识到它是不读取这些字符的Inp​​utStream。执行以下代码以正确的方式打印上述字符:

   InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
   BufferedReader in = new BufferedReader(isr);
   String line = null;
   while((line = in.readLine()) != null){
       System.out.print(line);
       logger.debug(line);
   }
   in.close();
   isr.close();

但是如何告诉FTP客户端或storeFile()使用UTF-8?

谢谢大家。

1 个答案:

答案 0 :(得分:1)

抱歉,但我得到了答案。

当我告诉你我看到变换了一些角色时

12345678A;IÑIGO;PÉREZ;JIMÉNEZ;X

我的意思是在FTP客户端应用程序上看到了这些字符(我使用的是WinSCP)。问题是选择了默认字符编码,它不是UTF-8 -

现在,在意识到它之后,我选择了正确的编码(UTF-8),并且文本似乎格式正确。

感谢您的帮助。