FtpClient中文乱码问题解决

原文网址:http://www.linuxidc.com/Linux/2014-10/107585.htm

最近在做文件服务器的相关东西,在原有的磁盘存储的基础上,增加了Ftp的存储方式,客户端选用的是Apache的FtpClient。  今天在测试的时候,发现中文的路径后者文件名不支持,查阅了相关资料后终于找到了解决的方法。

 使用类:

org.apache.commons.net.ftp.FTPClient

   问题描述:

           创建中文目录、上传中文文件名时,目录名及文件名中的中文显示乱码

 解决方法:

在网上Google了一些资料, FTP协议里面,规定文件名编码为iso-8859-1,所以目录名或文件名需要转码。

所以网上很多人的解决方法为:

将中文的目录或文件名转为iso-8859-1编码的字符。参考代码:

String name="目录名或文件名";

name=new String(name.getBytes("GBK"),"iso-8859-1");

很多人改为上述操作后,发现上传后中文不再乱码了,就以为解决了问题

还有人处理方法为:

ftpClient.setControlEncoding("GBK");

FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);

conf.setServerLanguageCode("zh");

上述的处理方法,我都试过,发现在我自己搭建的FTP服务器上,上传的文件中文是正常的,不是乱码,我当时以为中文问题就解决了,但是测试部的同事在将文件上传到他们搭建的FTP服务器上时,文件中文路径仍然是乱码,所以上述的解决方法是错误的。 

上面的方法之所以错误的原因是因为是没有考虑ftp服务器的编码格式。我搭建的Ftp服务器(windows2003 server)支持GBK编码方式,所以上述的解决方法可以,但是测试部的同事搭建的Ftp服务器(serv-u)是支持UTF-8格式的,所以此时在客户端的编码方式是GBK的,而搭设的ftp服务器中的设置就已经是utf-8的编码,所以肯定还是会出现乱码的问题。

那么正确的解决方法时是什么呢,我们可以仿照FlashFXP、FileZilla等ftp 客户端连接工具,看看他们是如何实现的,下面的两张图就是FileZilla的配置信息和连接时的命令信息。

图1:FileZilla配置信息

图2:FileZilla连接时信息

从图2中我们可以看到原来它向服务器发送了OPTS UTF8 ON命令,来开启服务器对UTF-8的支持。所以我们也可以仿照FileZilla那样向服务器发送该命令。如果服务器支持UTF-8我们就用UTTF-8,否则我们就用本地编码(GBK)来处理中文文件名。

下面是Java代码:

/** 本地字符编码 */
private static String LOCAL_CHARSET = "GBK";
 
// FTP协议里面,规定文件名编码为iso-8859-1
private static String SERVER_CHARSET = "ISO-8859-1";
 
private void connectFtpServer() {
if (ftpClient == null) {
ftpClient = new FTPClient();
}
if (ftpClient.isConnected()) {
return;
}
String host = getConfigValue(ADDRESS);
int port = Integer.valueOf(getConfigValue(PORT));
String user = getConfigValue(USER);
String password = getConfigValue(PASSWORD);
try {
ftpClient.connect(host, port);
if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
if (ftpClient.login(user, password)) {
if (FTPReply.isPositiveCompletion(ftpClient.sendCommand(
"OPTS UTF8", "ON"))) {// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK).
LOCAL_CHARSET = "UTF-8";
}
ftpClient.setControlEncoding(LOCAL_CHARSET);
ftpClient.enterLocalPassiveMode();// 设置被动模式
ftpClient.setFileType(getTransforModule());// 设置传输的模式
return;
} else {
throw new FileStorageException(
"Connet ftpServer error! Please check user or password");
}
}
} catch (IOException e) {
disConnectServer();
throw new FileStorageException(
"Connet ftpServer error! Please check the Configuration");
}
}
上传文件时,文件名称需要做编码转换
fileName = new String(fileName.getBytes(LOCAL_CHARSET),
SERVER_CHARSET);

通过上述方法,就能解决了中文乱码的问题。

时间: 2024-10-06 20:22:13

FtpClient中文乱码问题解决的相关文章

zabbix中文乱码问题解决方法(Zabbix 2.2.3)

我把zabbix安装完成后,调整为中文界面,出现乱码. 原因:因为没有中文字体,没有设置显示字体为中文. 解决方法(网络整理收集): 1.获取一个字体文件,上传至zabbixServer的web目录fonts文件夹(/data/www/zabbix/fonts), Windows → 控制面板 → 字体 命名为小写字母 2.修改配置文件,/www/zabbix/include/defines.inc.php //define('ZBX_FONT_NAME', 'DejaVuSans'); def

LoadRunner中文乱码问题解决方法

LoadRunner中文乱码问题解决方法 前段时间在录制,增强,整合LoadRunner脚本,期间两次遇到了中文乱码问题.在此记录一下中文乱码问题的解决办法. 一.录制回放中文乱码 我录制登陆的脚本,用户名中出现中文,回放的时候总是提示登陆失败.如下图: 图1 LR回放中文乱码 解决中文乱码可以在录制的时候在Virtual User Gen的 Tools->Recoding Options -> Advanced -> Support charset -> UTF-8.重新录制后中

ruby 输入中文乱码问题解决

近在Netbeans中用ruby时,发现输出的中文全是乱码,解决方法如下: 在Netbeans的安装目录中找到etc目录,然后打开这个目录,然后用把此文件在netbeans中打开 在里面的netbeans.conf配置文件中添加一个选项. 即是在 netbeans_default_options这行的末尾加上-J-Dfile.encoding=UTF-8这个参数. 添加后如下netbeans_default_options="-J-client -J-Xss2m -J-Xms32m -J-XX:

django 中文乱码问题解决

1.在所有涉及到中文显示的页面头加上 #coding:utf-8 2.修改settings.py文件,添加 FILE_CHARSET = 'utf-8' DEFAULT_CHARSET = 'utf-8' 然后修改LANGUAGE_CODE = 'zh-cn' 3.用记事本打开,另存为utf-8编码的. 以上都做过还是乱码,我就没招了 django 中文乱码问题解决,布布扣,bubuko.com

soapUI参数中文乱码问题解决方法&soap UI工具进行web接口测试

soapUI参数中文乱码问题解决方法 可能方案1: 字体不支持中文,将字体修改即可: file-preferences-editor settings-select font 修改字体,改成能显示中文的,如FangSong 可能方案2: 如果响应报文有乱码,可尝试: file-preferences-http settings,不勾选response compression 注意:前两种修改都要将乱码窗口重新打开才生效. 可能方案3: 编辑soapui.bat文件,在 set JAVA_OPTS

ubuntu mysql emma中文乱码问题解决

ubuntu mysql emma中文乱码问题解决 emma默认用apt-get 安装的话,emma是不支持中文的,配置文件或直接修改emma程序源文件(python). apt-get安装emma sudo apt-get install emma ubuntu的apt-get 安装emma是在/usr/share/emma目录下面. cd /usr/share/emma/emmalib sudo vim __init__.py 找到 "db_encoding": "lat

Android studio 中文乱码问题解决

针对刚安装好的Android studio, 比如import工程时,你会发现你的很多中文目录显示异常,如下图: 为什么会出现这个问题呢,其实原因很简单,因为Android studio的默认Font并不支持中文. 怎么解决呢,打开settings,如下图: 选择用红色框框起来任意一种,那为啥都是乱码呢,因为这些都是中文字体的格式,所以在你设置之前当然也是显示不了. 或者你也可以选择'simsun'.这个样式也很多人在用. OK,这样就可以了! Android studio 中文乱码问题解决,布

jsp get方式请求参数中包含中文乱码问题解决

1. 自己接收到参数之后在后台进行转码处理 2: 修改tomcat的配置文件  server.xml <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="utf-8"/> 即可 jsp get方式请求参数中包含中文乱码问题解决,布布扣,bubuk

Zip文件中文乱码问题解决方法(MAC-&gt;Windows)

前言: 最近收到的ZIP交互原型,打开查看中文一堆乱码.主要是产品都是高大上啊,用的都是MAC,咱酷毙用的Windows,话说安卓APP,你用MAC搞啥啊.可恨的压缩用的是zip,不是rar之类的.为了咱用Windows开发及测试的屌丝,分享下解决方法.如你高在上,用的MAC,请跳过本文. 目录: 1.问题 2.解决方法 1.问题 现象: a.ZIP文件,360压缩3.1正式版查看.解压中文为乱码. b.ZIP文件,Winrar 3.7压缩查看.解压中文为乱码. 2.解决方法 方法一:安装新版本