【发布时间】:2012-03-21 02:40:25
【问题描述】:
我必须将文件上传到 FTP 服务器。文件名包含特殊字母,例如äöü。在 FTP 服务器上,我需要将文件名进行 UTF-8 编码。
我的代码是这样的:
import org.apache.commons.net.ftp.FTPClient;
FTPClient client = new FTPClient();
...
boolean retval = client.storeFile(fileName, inputStream);
问题是storeFile之后,保存在FTP服务器上的文件名是ISO-8859-1编码而不是UTF-8。
如何告诉FTPClient 对文件名进行UTF-8 编码?
【问题讨论】:
-
我说你找错地方了,这可能是FTP服务器中的配置...
-
不一定。最初的 FTP 协议规范根本不支持 Unicode。为了在 FTP 连接上使用 UTF-8,双方必须首先同意它的使用。服务器必须在
FEAT命令中报告它甚至支持 UTF-8(请参阅 RFC 2640,尽管并非所有服务器都支持该规范)。有些服务器要求客户端发送非标准的OPTS UTF8 ON或OPTS UTF-8 NLST命令来激活UTF-8。这就是 100 万美元的问题——FTPClient支持什么,服务器支持什么?我会使用像 WareShark 这样的数据包嗅探器来观察 FTP 流量并进行查看。
标签: java utf-8 ftp apache-commons-net