【问题标题】:Upload File containing latin characters上传包含拉丁字符的文件
【发布时间】:2015-11-11 11:18:04
【问题描述】:

我正在使用最新的 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() 和/或 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?

谢谢大家。

【问题讨论】:

  • 您是如何从上传的文件中获取值的?您是否尝试将其下载回来并通过本地查看器进行测试?
  • 我要上传的文件是本地的。问题是这个文件的编码格式是 UTF-8,而服务器的 ISO-8859-1。

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


【解决方案1】:

对不起,我已经知道答案了。

当我告诉你我看到一些角色发生了变化

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

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

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

感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2012-09-20
    • 2014-10-30
    • 2018-06-21
    • 2010-12-27
    • 2012-09-26
    • 2016-05-19
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    相关资源
    最近更新 更多