Apache NiFi PutFTP处理器无法处理含日文文件名问题求助
Apache NiFi PutFTP日文文件名乱码解决办法
检查FTP服务器的字符集配置
多数FTP服务器默认采用ISO-8859-1编码,需先确认服务器是否开启UTF-8支持:- 若是vsftpd,在配置文件中添加
utf8_enable=YES并重启服务; - 若是FileZilla Server,在服务器设置里勾选「使用UTF-8作为默认字符集」。
服务器不支持UTF-8的话,仅在NiFi端设置编码无效,这是解决问题的核心前提。
- 若是vsftpd,在配置文件中添加
调整PutFTP的被动模式设置
部分FTP服务器在被动模式下的编码处理逻辑存在差异,尝试开启或关闭处理器的Passive Mode属性,测试是否能改善文件名显示效果。手动转换文件名编码(针对服务器强制非UTF-8的场景)
如果服务器仅支持特定编码(比如Shift-JIS),可以用UpdateAttribute处理器配合Groovy脚本转码:def originalName = flowFile.getAttribute('filename') def targetName = new String(originalName.getBytes('UTF-8'), 'Shift-JIS') flowFile = session.putAttribute(flowFile, 'filename', targetName) return flowFile注意:必须先确认服务器要求的编码格式,再对应修改脚本里的编码参数。
升级NiFi到稳定新版本
旧版本NiFi的PutFTP处理器可能存在UTF-8编码处理的bug,比如部分FTP命令的文件名编码未正确适配,升级到1.20及以上的稳定版本大概率能解决这类兼容性问题。替换为PutSFTP处理器(若服务器支持)
SFTP协议原生支持UTF-8文件名,兼容性远优于FTP,如果目标服务器支持SFTP,直接改用PutSFTP处理器,无需额外编码配置就能避免乱码问题。
内容的提问来源于stack exchange,提问作者JefinOJ
相关产品推荐
相关产品推荐

