You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:06:50