Java Commons Net FTPClient检索到的文件编码问题
我正在从FTP服务器检索文件。该文件编码为UTF-8Java 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
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编码而已。如果你可以用一个麻烦字符的字节示例来编辑你的文章(使用十六进制编辑器来查找它们),我们可以验证这一点。