最近在用Java开发FTP下载功能,以往因为下载的不是直接的文件夹和中文文件,没有出现乱码的现象。近来由于要下载的文件没有压缩,造成下载后出现了中文乱码(中文文件夹或者中文文件名字)。那么怎么办呢?
FTP中文乱码终极解决方案
1.第一次尝试
当出现乱码时,首先想到的就是编码不匹配,于是通过百度搜索检查到是有两个地方需要设置,设置完成后在自己架设的服务器上已经解决了乱码问题。
String localCharset="GBK";
ftp.setControlEncoding(localCharset);
ftp.changeWorkingDirectory(new String(remotePath.getBytes(localCharset),"ISO-8859-1"));
2.第二次尝试
当把代码部署到服务器上时,由于FTP服务器是由第三方提供的,当下载完成后,又出现了中文乱码的问题,这时又进行了一番百度,发现FTP服务器存在UTF-8编码的可能。于是需要开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK)。
String localCharset="GBK";
if (FTPReply.isPositiveCompletion(ftp.sendCommand("OPTS UTF8", "ON"))) {
localCharset = "UTF-8";
}
结语
经过以上两步折腾,终于解决了在Java下通过Ftp下载带中文的文件夹或文件时出现的乱码问题。