使用hutool ftp中文乱码问题

news/2024/11/9 3:01:47/

事情背景: 最开始我是使用的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);} ```

http://www.ppmy.cn/news/421760.html

相关文章

刷车机器人_各位车主注意了!这样的洗车很伤爱车!99%的人都不知道!

最近小编下班路过一个加油站&#xff0c;看到这个加油站旁边新增了一样服务就是洗车&#xff0c;此洗车非彼洗车&#xff0c;在这个全球智能化的大环境下&#xff0c;有无人驾驶汽车&#xff0c;无人驾驶飞机&#xff0c;无人售票公交等&#xff0c;越来越自动化的操作&#xf…

服务器修复划痕,教你修复各种车身刮痕,只需要简的工具,几分钟搞定(建议收藏)...

我们详细讲述了如何清除车内的各种顽固污渍。看了的朋友应该或多或少地学到一些关于顽渍清洁的专业知识。而无论是新车主还是老车主&#xff0c;在用车的时候都可能会为车身上无缘无故地多出来的刮痕而烦恼。本期我们一起来了解一下如何自行修复车身上的划痕。 我们要准备的用具…

【渝粤题库】广东开放大学 物业管理实务 形成性考核 (2)

选择题 题目&#xff1a;房地产属于非货币性资产&#xff0c;其拥有者可以很快将房地产兑换成现金。 题目&#xff1a; 物业经营管理既包括保证物业正常使用的运行操作管理活动&#xff0c;也包括将物业作为一种收益性资产所进行的一系列的经营活动。 题目&#xff1a;政府干预…

《项目实战》使用JDBC手写分库

文章目录 1、概要2、整体架构流程3、技术名词解释4、技术细节4.1、指定分库规则4.2、安装Mysql数据库以及建库建表4.3、创建Java项目4.3.1、使用 Idea创建Maven项目4.3.1.1、修改pom.xml配置 4.3.2、编写分库/路由规则 DbRouter4.3.3、编写数据库交互工具 DaoUtil4.3.4、编写数…

【渝粤题库】广东开放大学 物业管理实务 形成性考核

选择题 题目&#xff1a;房地产属于非货币性资产&#xff0c;其拥有者可以很快将房地产兑换成现金。 题目&#xff1a; 物业经营管理既包括保证物业正常使用的运行操作管理活动&#xff0c;也包括将物业作为一种收益性资产所进行的一系列的经营活动。 题目&#xff1a;政府干预…

名悦集团:汽车天窗只是个摆设吗?

汽车天窗相信大家都不陌生&#xff0c;在很久以前&#xff0c;只有中高端的车型才会配备天窗。很多人以为天窗只是一个摆设&#xff0c;增加车子的豪华感&#xff0c;不知道天窗具体有什么用处&#xff0c;但是天窗如果仅仅是用来观光透气&#xff0c;那真的就是大材小用&#…

进程-线程-程序 | 并发-并行

参考&#xff1a; 指令级并行&#xff0c;线程级并行&#xff0c;数据级并行区别&#xff1f;线程的概念是什么&#xff1f; 1 进程与线程 首先&#xff0c;由一个小例子&#xff1a; 小明的一天&#xff0c;可分为&#xff1a;上午、下午、晚上。 由小明的例子&#xff0c;…

小游戏活动策划(全)

小游戏活动策划(全) 一、X’MAN 特辑 A.游戏主线: X’MAN特辑,设置玩家中有一个卧底X’MAN。将玩家分成两或三组。在各个游戏中,赢的一组可以得到关于X’MAN的一个真提示,一个假提示,并可以选择将自己队伍中的一人与其他队伍中的一人更换。在最后的撕名牌游戏结束后,若…