Commons Net FTPClient检索文件编码问题

时间:2012-10-10 09:55:38

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

我正在从FTP服务器检索文件。该文件编码为UTF-8

ftpClient.connect(props.getFtpHost(), props.getFtpPort());
ftpClient.login(props.getUsername(), props.getPassword());
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
inputStream = ftpClient.retrieveFileStream(fileNameBuilder
                    .toString());

然后在其他地方我正在阅读输入流

bufferedReader = new BufferedReader(new InputStreamReader(
                    inputStream, "UTF-8"));

但该文件未被读取为UTF-8编码!

我尝试了ftpClient.setAutodetectUTF8(true);,但仍无效。

有什么想法吗?

修改 例如,原始文件中的一行是 ... 00248090041KENANARANIN00000015.993FAC ...

通过FTPClient下载之后,我解析它并加载一个java对象,java对象的一个​​字段是name,这行被读作“KENANSAR IN”

我尝试直接转储到磁盘:

File file = new File("D:/testencoding/downloaded-file.txt");
FileOutputStream fop = new FileOutputStream(file);
ftpClient.retrieveFile(fileName, fop);
if (!file.exists()) {
    file.createNewFile();
}

我比较了两个文件的MD5校验和(FTP服务器1和转储到磁盘的文件),它们是相同的。

2 个答案:

答案 0 :(得分:2)

我首先将问题分开:将文件转储到磁盘,并将其与原始文件进行比较。如果它与原始版本相同,则问题与UTF-8无关。 FTP代码看起来不错,如果你说你想要原始的二进制数据,我希望它不会弄乱任何东西。

如果文件 与之前一样,那么问题与FTP无关。你说“文件没有被读成UTF-8编码”但是你不清楚你的意思。你有多确定它是UTF-8文本?如果您可以使用二进制数据编辑您的问题,如何将其作为文本阅读,以及您如何期望将其作为文本阅读,那将非常有用。

答案 1 :(得分:0)

尝试使用InputStream和OutputStream而不是InputStreamReader将文件内容下载为字节而不是字符。这样,您可以确保在传输过程中不会更改文件。