Apache Camel FTP非英文字符文件名编码问题求助
解决Camel FTP路由中非英文字符文件名乱码问题
问题根源
乱码出在文件名头部Exchange.FILE_NAME的编码解析,而非文件内容:
- 示例中
ç的UTF-8编码为0xC3A7,若程序用ISO-8859-1/CP1252解析,会被拆分为Ã和§,即你看到的aslan çilek .convertBodyTo(String.class, "UTF-8")仅处理文件内容,对文件名头部无作用
解决步骤
1. 给源FTP端点指定编码
在源FTP的端点URL中添加charset参数,匹配FTP服务器的编码(Windows环境优先用UTF-8,若无效试CP1252):
from("ftp://user@host/source-path?charset=UTF-8&[其他FTP参数]")
2. 正确读取文件名头部
若指定端点编码后仍乱码,检查Exchange.FILE_NAME的类型:若为byte[],直接调用toString()会用JVM默认编码解析,需手动转码:
@Override public void process(Exchange exchange) throws Exception { Object fileNameHeader = exchange.getIn().getHeader(Exchange.FILE_NAME); String fileName; if (fileNameHeader instanceof byte[]) { // 用指定编码转成字符串 fileName = new String((byte[]) fileNameHeader, "UTF-8"); } else { fileName = fileNameHeader.toString(); } // 原文件名修改逻辑保持不变 String newFn = fileName.substring(0, fileName.indexOf('.')) + "_" + sdf.format(new Date()) + fileName.substring(fileName.indexOf('.')); exchange.getIn().setHeader("CamelFileName", newFn); }
3. 目标端点同步编码设置
若目标也是FTP端点,同样添加charset=UTF-8参数,避免写入时编码不一致:
.to("ftp://user@host/target-path?charset=UTF-8&[其他FTP参数]")
验证提示
- 确认FTP服务器的编码配置:Windows IIS FTP需手动开启UTF-8支持,第三方FTP服务器查看其编码设置
- 可打印文件名的字节数组,对比原文件名的UTF-8字节,验证解析是否正确
内容的提问来源于stack exchange,提问作者beyza aydın
相关产品推荐
相关产品推荐

