2

我正在从 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);,但还是不行。

有任何想法吗?

编辑: 例如原始文件中的一行是 ...00248090041KENAN SARÐIN 00000000015.993FAC ...

通过 FTPClient 下载后,我对其进行解析并加载到一个 java 对象中,该 java 对象的字段之一是 name,对于这一行读取为“KENAN SAR�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 服务器一和转储到磁盘的一个),它们是相同的。

4

2 回答 2

2

我会先分离出问题:将文件转储到磁盘,然后与原始文件进行比较。如果和原版一样,则问题与UTF-8无关。不过, FTP 代码看起来还不错,如果您说想要原始二进制数据,我希望它不会弄乱任何东西。

如果传输后文件和以前一样,那么问题与FTP无关。你说“文件没有被读取为 UTF-8 编码”,但不清楚你的意思。你有多确定它是以 UTF-8 文本开头的?如果您可以使用二进制数据编辑您的问题,它是如何被读取为文本的,以及您希望它如何被读取为文本,那将非常有帮助。

于 2012-10-16T06:19:08.537 回答
0

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

于 2012-10-16T09:42:02.303 回答