上传包含拉丁字符的文件

Upload File containing latin characters

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

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

下一行:

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

变成这样:

12345678A;IÑIGO;PÉREZ;JIMÉ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() and/or setControlEncoding() 会起作用),但是不行...

我尝试打印到标准输出(屏幕,带记录器和 System.out),我意识到是 InputStream 不读取这些字符。执行以下代码以正确的方式打印提到的字符:

   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?

谢谢大家

抱歉,我已经找到答案了。

当我告诉你我看到一些字符变形时

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

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

现在,在意识到这一点之后,我select正确的编码(UTF-8),并且文本看起来格式正确。

感谢您的帮助。