使用hutool ftp中文乱码问题

事情背景: 最开始我是使用的hutool的工具类ftp, maven依赖

	<dependency>
          <groupId>cn.hutool</groupId>
          <artifactId>hutool-all</artifactId>
          <version>5.8.9</version>
      </dependency>
      <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.8.0</version>
        </dependency>

然后我最开始错误的初始化的部分是这样的

 			url = new URL("ftp://" + config.getUrl()); 
            int port = url.getPort() == -1 ? 21 : url.getPort();
            Ftp ftp = new Ftp(new FtpConfig(url.getHost(), port, config.getUser(), config.getPassword(), CharsetUtil.CHARSET_UTF_8), FtpMode.Passive);
            ftp.getClient().setFileType(FTPClient.BINARY_FILE_TYPE);
            ftp.getClient().setAutodetectUTF8(true);
            ctx.setFtp(ftp);

遇到的问题:遇到一个中文乱码的,下载不了。

图示:
服务端utf-8 <----> 客户端 utf-8
服务端ISO-8859-1 <----> 客户端 ISO-8859-1
服务端ISO-8859-1 <----> 客户端 GBK ×

解决办法:1 、首先弃用了hutool的工具类。因为 client.setAutodetectUTF8(true);这个方法的注释说明了,要在连接前调用,而hutool的初始化方法中,可以传指定的字符集,但是调用setAutodetectUTF8 已经是在连接之后了。

2、ftp服务器默认的编码是ISO-8859-1,net包初始化的 new FTPClient()默认的也是ISO-8859-1,如果都是ISO-8859-1 可以正常传文件,但是名字是乱码的,可以使用CharsetUtil.convert(name,CharsetUtil.CHARSET_ISO_8859_1,CharsetUtil.CHARSET_GBK) 转成GBK即可。

3、如果服务器不支持utf-8,那么默认的编码是ISO-8859-1,那么使用client.setControlEncoding(CharsetUtil.GBK)
istFiles得到的是中文,但是调用listFiles, changeWorkingDirectory,retrieveFileStream 传入的参数还必须是转成ISO-8859-1

4、如果全部都设置成utf-8 也是正确的。开启自动检 client.setAutodetectUTF8(true); 如果是支持utf-8的,客户端和服务端都用utf-8,不会出错;

  		if (FTPReply.isPositiveCompletion(client.sendCommand("OPTS UTF8", "ON"))) {
               log.info("开启ftp utf-8编码");
               // 支持UTF-8字符集
               client.setControlEncoding(CharsetUtil.UTF_8);
           } ```
           

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hutool SFTP中解决中文问题有几种方法可以尝试。 首先,根据引用[1],尝试使用`sftp.setFilenameEncoding("GBK")`来设置文件名编码。但是根据该引用所述,这种方法可能不起作用。如果这种方法没有解决问题,可以尝试下面的方法。 其次,根据引用,FTP服务器默认的编码是ISO-8859-1,而Hutool SFTP在初始化时默认也是使用ISO-8859-1编码。如果文件名是码的,可以使用`CharsetUtil.convert(name, CharsetUtil.CHARSET_ISO_8859_1, CharsetUtil.CHARSET_GBK)`将文件名转换为GBK编码。这样可以解决中文问题。 另外,根据引用,如果全部都设置成UTF-8也是可以的。你可以尝试设置`client.setAutodetectUTF8(true)`来开启自动检测UTF-8编码,并且使用`client.setControlEncoding(CharsetUtil.UTF_8)`将控制编码设置为UTF-8。如果FTP服务器和客户端都支持UTF-8,那么中文问题应该就能够解决了。 综上所述,你可以尝试以下方法来解决Hutool SFTP中的中文问题: 1. 使用`sftp.setFilenameEncoding("GBK")`来设置文件名编码,如果不起作用则尝试下面的方法。 2. 使用`CharsetUtil.convert(name, CharsetUtil.CHARSET_ISO_8859_1, CharsetUtil.CHARSET_GBK)`将文件名转换为GBK编码。 3. 设置`client.setAutodetectUTF8(true)`并使用`client.setControlEncoding(CharsetUtil.UTF_8)`将控制编码设置为UTF-8。 希望这些方法能够帮助你解决Hutool SFTP中的中文问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值