使用Appache的FTPClient遇到的一些文件名乱码问题-总结(遇到了再续....)

1.       问题:在文件上传FTP的时候,文件名是乱码?

解释:

首先要明白两个编码,FTP协议的编码,FTP服务器的编码

FTP协议编码:指的是FTP传输协议所用的编码,用的是ISO-8859-1

FTP服务器编码:指的是所用的FTP服务器的编码(如,IIS :GBK

需要明确:源文件,传输协议,FTP服务器

一:我们的源文件是通过传输协议传输到FTP服务器的,所以,如果要让FTP服务器显示的名称应该要和源文件一样。所以两者的编码要一致!统一使用 GBK,因为FTP服务器的编码我们改不了

二:既然两者中间有一个FTP传输协议,协议的名称是ISO-8859-1,因此,我们必须把源文件转换成ISO-8859-1,才可以避免乱码,另外,FTP服务器的编码是GBK,所以,我们本地转码需要从GBK转换成ISO-8859-1

/** 本地字符编码 */

private static String LOCAL_CHARSET = "GBK";

// FTP协议里面,规定文件名编码为iso-8859-1

private static String SERVER_CHARSET = "ISO-8859-1";

String fileName = new String(file.getName().trim().getBytes(LOCAL_CHARSET), SERVER_CHARSET);

三:FTPClient 不应该设置任何编码,就是用默认的就好(默认是ISO-8859-1

使用Appache的FTPClient遇到的一些文件名乱码问题-总结(遇到了再续....)


2问题:Android 使用FTPClient下载FTp上面的问题件的时候,如何设置编码

一:一定要设置,FTPClient的编码是 GBK,不然无法得拿到真实的文件名

二:根据真实的文件名获取文件后,下载之前,要不这个真实的文件名转成ISO-8859-1然后才下载,以为FTP的传输协议就是ISO-8859-1,直接发GBKFTP不认,那肯定就找不到该文件啦

总结:一定要知道目标编码,传输编码,然后把源文件编码设置与目标编码一致,然后转换成传输编码格式以便传输

你可能感兴趣的:(使用Appache的FTPClient遇到的一些文件名乱码问题-总结(遇到了再续....))