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

升级JDK至Java 18后Windows环境西里尔字母显示乱码问题

Windows环境JDK18+西里尔字母乱码问题排查方案

问题根因

该故障是JDK版本迭代的默认规则变更与Windows系统控制台默认编码不匹配导致:

  • 仅在Windows出现、macOS/Linux运行正常:类Unix系统默认全局编码为UTF-8,和JDK18的编码规则天然对齐,不会出现适配问题
  • JDK17运行正常、升级到JDK18后故障出现:Java 18 引入JEP 400特性,将JDK默认字符集从「跟随操作系统本地代码页」调整为「全局默认UTF-8」;JDK17及更早版本会自动适配Windows本地代码页,和控制台编码一致,因此不会乱码
  • 手动将编码修改为1251后西里尔字母恢复正常、其余内容乱码:本质是手动将JDK编码改回了Windows俄文环境默认的1251代码页,和控制台接收编码对齐,但项目中其余按UTF-8存储的非西里尔内容会因为编码不匹配出现新的乱码,属于局部适配的临时方案,无法全局生效
  • Maven控制台出现完全一致的乱码:Maven执行构建、测试时同样调用JDK18环境,继承了相同的编码不匹配问题,故障和IDEA本身的控制台配置无关
  • 网上公开的旧版IDEA控制台乱码方案无效:这类方案都是针对JDK17及更早版本的编码适配逻辑,没有覆盖JDK18的默认字符集规则变更,因此操作后无法解决问题

分步解决方案

全链路统一JVM输出、控制台接收、源文件存储三个环节的编码为UTF-8即可彻底解决,不需要局部设置1251编码:

  1. 固定JVM全场景编码参数
    • 打开IDEA,选择顶部菜单Help > Edit Custom VM Options,在文件末尾追加以下配置,保存后重启IDEA:
      -Dfile.encoding=UTF-8
      -Dsun.stdout.encoding=UTF-8
      -Dsun.stderr.encoding=UTF-8
      
    • 打开IDEA的Maven配置页File > Settings > Build, Execution, Deployment > Build Tools > Maven > Runner,在VM Options输入框中填入上述三个JVM参数,保证Maven构建、执行测试时使用统一编码
  2. 对齐Windows控制台编码为UTF-8
    按Win+R输入intl.cpl回车打开区域设置,切换到「管理」标签页,点击「更改系统区域设置」,勾选「Beta版:使用Unicode UTF-8提供全球语言支持」,确认后重启系统,Windows控制台会默认使用UTF-8(代码页65001),和JDK18的默认输出编码完全对齐。
    若不需要开启全局Beta设置,可在IDEA的每个运行/调试配置的「Before launch」步骤里新增执行chcp 65001命令,临时切换当前控制台代码页到UTF-8,全局配置一次生效稳定性更高。
  3. 校验项目编码配置统一
    打开IDEA编码设置页File > Settings > Editor > File Encodings,将Global Encoding、Project Encoding、Default encoding for properties files全部设置为UTF-8,同时勾选Properties文件的Transparent native-to-ascii conversion选项,清除所有局部设置为1251的编码配置,避免非西里尔内容乱码。

异常表现参考

西里尔字母输出乱码效果:
西里尔字母乱码截图
手动修改编码为1251的配置界面:
编码设置为1251的配置截图

内容的提问来源于stack exchange,提问作者Максим Некрасов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:48:35