FTPClient 操作FTP时,路径或文件名中文乱码问题

需要在new FTPClient()之后设置编码,

需要在new FTPClient()之后设置编码,
FTPClient ftpClient = new FTPClient();

//Encoding不能在connect和login之后设置,否则不会生效
原因:因为 FTPClient继承FTP,FTP继承SocketClient,在ftpClient调用方法connect()时,
会调用_connectAction_()方法,如果还没有没置编码,getControlEncoding()会默认使用ios-8859-1,
所以必需在connect和login前完成编码设置。
ftpClient.setControlEncoding("GBK");
//ftpClient.setAutodetectUTF8(true);
ftpClient.connect(ip,port);
ftpClient.login(username,passwoed);
// 设置文件类型(二进制传输模式)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
// 设置被动模式(不要写在connect,login之前)
ftpClient.enterLocalPassiveMode();

实测生效,完美解决中文乱码问题

实测生效,完美解决中文乱码问题

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: nodejsftp拉取文件列表中文文件名乱码,可以通过设置FTP连接的编码方式来解决。在连接FTP,使用iconv-lite模块将中文编码方式转换为UTF-8,例如: ```javascript var ftp = new PromiseFtp(); ftp.connect({ host: 'ftp.example.com', port: 21, user: 'username', password: 'password', encoding: 'utf8', debug: console.log }).then(function (serverMessage) { return ftp.list('/'); }).then(function (data) { console.log(data); }); ``` 在以上代码中,设置了FTP连接的编码方式为utf8,通过ftp.list('/')方法获取FTP服务器根目录下的文件列表,然后打印出来。这样就可以解决中文文件名乱码问题了。 ### 回答2: 在Node.js中,处理FTP拉取文件列表中文文件名乱码问题可以通过以下方法解决: 1. 设置编码格式:可以尝试设置文件列表的编码格式为UTF-8,因为UTF-8支持大多数语言的字符集。可以使用`iconv-lite`模块将乱码转换为正确的编码格式。 ```javascript const iconv = require('iconv-lite'); const FTPClient = require('ftp'); const ftp = new FTPClient(); ftp.on('ready', () => { ftp.list('/', (err, list) => { list.forEach((file) => { const fileName = iconv.decode(Buffer.from(file.name, 'binary'), 'GBK'); console.log(fileName); }); ftp.end(); }); }); ftp.connect({ host: 'ftp.example.com', user: 'username', password: 'password', debug: console.log }); ``` 2. 特定FTP服务器处理:某些FTP服务器可能对文件名进行了特殊处理,需要根据其具体规则进行解析。例如,某些FTP服务器可能使用GB2312编码而非UTF-8,或者在文件名前加上特殊字符。 3. 手动检测编码:如果无法确定文件列表的编码格式,可以尝试使用第三方库如`jschardet`或`chardet`来检测文件名的编码格式,并进行相应的转换。 ```javascript const iconv = require('iconv-lite'); const FTPClient = require('ftp'); const jschardet = require('jschardet'); const ftp = new FTPClient(); ftp.on('ready', () => { ftp.list('/', { encoding: 'binary' }, (err, list) => { list.forEach((file) => { const fileName = iconv.decode(Buffer.from(file.name, 'binary'), jschardet.detect(file.name).encoding); console.log(fileName); }); ftp.end(); }); }); ftp.connect({ host: 'ftp.example.com', user: 'username', password: 'password', debug: console.log }); ``` 以上是两种可能的解决方案,可以根据具体情况选择适合的方法来处理FTP拉取文件列表中文文件名乱码问题。 ### 回答3: 在Node.js中使用FTP拉取文件列表遇到中文文件名乱码问题,可以通过以下方法解决: 1. 使用iconv-lite库进行编码转换:首先需要安装iconv-lite库,然后可以使用其提供的iconv方法将乱码字符串转换为正确的中文文件名。示例代码如下: ``` const iconv = require('iconv-lite'); const FTP = require('ftp'); const ftp = new FTP(); ftp.connect({ host: 'ftp.example.com', user: 'username', password: 'password' }); ftp.on('ready', () => { ftp.list('/', (err, files) => { if (err) throw err; files.forEach(file => { const fileName = iconv.decode(file.name, 'gb2312'); console.log(fileName); }); ftp.end(); }); }); ``` 2. 使用utf8库进行编码转换:可以使用utf8库将乱码字符串转换为UTF-8编码的中文文件名。示例代码如下: ``` const utf8 = require('utf8'); const FTP = require('ftp'); const ftp = new FTP(); ftp.connect({ host: 'ftp.example.com', user: 'username', password: 'password' }); ftp.on('ready', () => { ftp.list('/', (err, files) => { if (err) throw err; files.forEach(file => { const fileName = utf8.decode(file.name); console.log(fileName); }); ftp.end(); }); }); ``` 无论使用哪种方法,都需要确定FTP服务器的文件名编码格式,然后将乱码字符串转换为对应的编码格式,才能正确显示中文文件名

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值