我正在使用最新的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),我意识到它是不读取这些字符的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?
谢谢大家。
答案 0 :(得分:1)
当我告诉你我看到变换了一些角色时
12345678A;IÑIGO;PÉREZ;JIMÉNEZ;X
我的意思是在FTP客户端应用程序上看到了这些字符(我使用的是WinSCP)。问题是选择了默认字符编码,它不是UTF-8 -
现在,在意识到它之后,我选择了正确的编码(UTF-8),并且文本似乎格式正确。
感谢您的帮助。