
Windows 10 默认使用 GBK 编码,而 Spring Boot 项目常依赖 UTF-8 处理非拉丁字符(如俄文、中文),导致 mvn test 时字符串乱码(如 "Текст"),但在 IntelliJ IDEA 中正常——根本原因是 Maven Surefire 插件未显式指定测试执行编码。
windows 10 默认使用 gbk 编码,而 spring boot 项目常依赖 utf-8 处理非拉丁字符(如俄文、中文),导致 `mvn test` 时字符串乱码(如 "Текст"),但在 intellij idea 中正常——根本原因是 maven surefire 插件未显式指定测试执行编码。
在 Maven 构建过程中,maven-surefire-plugin 负责运行单元测试,但它默认不继承
<properties><project.build.sourceencoding>UTF-8</project.build.sourceencoding><project.reporting.outputencoding>UTF-8</project.reporting.outputencoding></properties>
以及尝试通过 -Dfile.encoding=UTF-8 设置 JVM 参数,仍可能因 Windows 控制台、PowerShell 或 CMD 的终端编码限制,或 Surefire 插件自身对测试类加载/标准输出流的编码处理不一致,导致 String 断言失败。
✅ 正确且最直接的解决方案是:为 maven-surefire-plugin 显式声明
直播话术巡检系统(Windows版) — 实时语音转写、关键词检测、场景自动切换、告警推送、大屏可视化。支持 Windows VB-Cable 虚拟声卡音频采集,阿里云 ASR 实时识别。一键启动脚本,自动安装环境。
在 pom.xml 的
<build><plugins><plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-surefire-plugin</artifactid><version>3.2.5</version><configuration><encoding>UTF-8</encoding><argline>-Dfile.encoding=UTF-8</argline><!-- 可选:强制 JVM 使用 UTF-8 输出(避免控制台截断) --><systempropertyvariables><file.encoding>UTF-8</file.encoding></systempropertyvariables></configuration></plugin></plugins></build>
⚠️ 注意事项:
- 版本兼容性:Spring Boot 3.x 推荐使用 Surefire ≥ 3.0.0;若用旧版 Spring Boot 2.x,2.22.2 或 3.0.0-M9 以上亦可。
- IDE 同步:IntelliJ 默认使用项目编码运行测试,且会自动注入 -Dfile.encoding=UTF-8,因此本地 IDE 运行无问题——但 CI/CD 或命令行 mvn test 必须依赖此插件配置。
- 额外加固(Windows 环境):若仍出现控制台乱码(非测试失败,仅日志显示异常),可在运行前执行 chcp 65001(切换当前 CMD/PowerShell 为 UTF-8 模式),或在 CI 脚本中前置该命令。
- 验证方式:添加一个简单测试验证编码是否生效:
@Test
void testUtf8String() {
String expected = "Текст"; // 俄文示例
String actual = new String("Текст".getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8);
assertEquals(expected, actual); // 应通过
}
总结:










