【发布时间】: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