我正在从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和转储到磁盘的文件),它们是相同的。
答案 0 :(得分:2)
我首先将问题分开:将文件转储到磁盘,并将其与原始文件进行比较。如果它与原始版本相同,则问题与UTF-8无关。 FTP代码看起来不错,如果你说你想要原始的二进制数据,我希望它不会弄乱任何东西。
如果文件 与之前一样,那么问题与FTP无关。你说“文件没有被读成UTF-8编码”但是你不清楚你的意思。你有多确定它是UTF-8文本?如果您可以使用二进制数据编辑您的问题,如何将其作为文本阅读,以及您如何期望将其作为文本阅读,那将非常有用。
答案 1 :(得分:0)
尝试使用InputStream和OutputStream而不是InputStreamReader将文件内容下载为字节而不是字符。这样,您可以确保在传输过程中不会更改文件。