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

Cucumber feature文件添加# encoding: iso-8859-1后报错乱码问题

问题根因

从报错的包名io.cucumber.core.gherkin判断,你使用的是6.0及以上版本的Cucumber,该版本的Gherkin解析器有两个明确规则:

  1. 仅支持UTF-8编码的feature文件,早年Ruby版Cucumber遗留的# encoding: xxx声明已经被完全废弃,添加这行不会触发解析器的编码切换逻辑。
  2. 语言声明# language: fr必须能被解析器正确读取,才会加载法语对应的关键字映射(比如Fonctionnalité对应Feature、Scénario对应Scenario)。

你遇到的两个现象本质是同一个问题:

  • 添加# encoding: iso-8859-1时,你的文件实际存储为ISO-8859-1编码,解析器默认按UTF-8读取时,# language: fr行的字节解析异常,没有加载法语关键字包,因此把Fonctionnalité等合法法语关键字识别为非法内容,抛出解析异常。
  • 去掉encoding头时,同样因为文件是ISO-8859-1编码,解析器按UTF-8读取重音字符时,字节序列不符合UTF-8规范,就会显示�乱码。
解决步骤
  • 删除feature文件顶部的# encoding: iso-8859-1行,新版本Cucumber不需要任何编码声明。
  • 把feature文件转存为无BOM的UTF-8编码,这是最核心的步骤:
    • IntelliJ IDEA:点击右下角状态栏的编码选项,选择UTF-8,弹出对话框时选择Convert(不要选Reload,Reload仅临时修改展示编码,不会修改文件存盘的编码格式)
    • VS Code:点击右下角状态栏的编码标识,选择Save with Encoding,在弹出列表里选UTF-8(不要选UTF-8 with BOM)
    • Eclipse:右键点击feature文件,选择Properties -> Resource,在Text file encoding区域选择UTF-8,点击Apply保存
  • 检查构建配置的全局编码,避免构建过程中把UTF-8的feature文件转成其他编码:
    如果用Maven,在pom.xml中添加全局编码配置:
    <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>
    
    如果用Gradle,在build.gradle中添加配置:
    tasks.withType(JavaCompile) {
      options.encoding = 'UTF-8'
    }
    
  • 清空构建缓存后重新运行测试:执行mvn clean或gradle clean删除target/build目录下旧的缓存文件,避免之前ISO-8859-1编码的feature文件副本被加载。
验证标准

转码完成后,feature文件头部仅保留# language: fr即可,不需要其他额外配置:解析器可以正确识别所有法语关键字,测试运行时réunion这类重音字符可以正常显示,不会出现乱码或解析错误。

内容的提问来源于stack exchange,提问作者mma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:42:25