Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Commons Net FTPClient检索到的文件编码问题_Java_Ftp Client_Apache Commons Net - Fatal编程技术网

Java Commons Net FTPClient检索到的文件编码问题

Java Commons Net FTPClient检索到的文件编码问题,java,ftp-client,apache-commons-net,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

我正在从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)但仍然不起作用

有什么想法吗

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

在通过FTPClient下载之后,我解析它并加载到一个java对象中,java对象的一个字段是name,这一行读作“KENAN SAR”�在“

我尝试直接转储到磁盘:

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服务器一个和另一个转储到磁盘),它们是一样的。

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


如果传输后的文件与之前相同,则问题与FTP无关。您说“该文件未被读取为UTF-8编码”,但不清楚您的意思。你有多确定它是UTF-8文本?如果你能用二进制数据编辑你的问题,它是如何被读取为文本的,以及你希望它是如何被读取为文本的,那将非常有帮助。

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

@braincell:不过,您并没有真正遵循建议。。。将FTP端与文本编码端分开。使用
FileOutputStream
(完全没有文本)将文件直接保存到磁盘,并将其与原始文件进行比较,例如使用MD5哈希。Jon我尝试直接保存到磁盘,请参阅我的编辑。虽然我没有检查MD5哈希,但是这些文件看起来和我一样。感谢you@braincell字体这完全取决于你如何看待它们。如果您正在使用任何可能推断编码的东西,那么它基本上是一个无用的测试。你必须查看各个字节。好的,Jon,MD5校验和告诉你它们是相等/相同的文件。现在怎么办?@braincell:好吧,这表明它与FTP无关——只是文件没有被UTF-8编码而已。如果你可以用一个麻烦字符的字节示例来编辑你的文章(使用十六进制编辑器来查找它们),我们可以验证这一点。