IntelliJ内置Windows PowerShell终端特殊货币符号显示乱码问题
问题根因
该乱码是典型的Windows环境多套编码不匹配导致的,具体逻辑:
- IntelliJ 自带的运行控制台默认强制全链路使用UTF-8编码处理输出内容,不存在编码转码错位,因此货币符号显示完全正常。
- 内置Windows PowerShell终端的编码逻辑分两层:Java进程启动时会默认读取系统ANSI代码页(欧美语言系统默认为CP1252)作为标准输出编码,而旧版PowerShell终端默认用系统OEM代码页(欧美语言系统默认为CP437)解析收到的输出内容,两套单字节编码的字符映射表不一致,就会出现乱码。
你遇到的具体输出异常如下:
| 预期输出 | 实际输出 | 所属地区 |
|---|---|---|
| 212.00 € | 212.00 Ç | 芬兰 |
| £212.00 | ú1212.00 | 芬兰 |
这类€变Ç、£变ú的表现,就是CP1252编码的字符被按CP437解析的典型错位特征。之前尝试常规排查无效,大多是只改了IDE的文件编码设置,没有统一终端解析编码和JVM输出编码两个环节的配置。
可行解决方案
按操作成本从低到高可选以下方案:
临时单次生效方案
在运行Java程序前,先在当前PowerShell窗口执行以下命令切换终端代码页为UTF-8,再启动程序即可正常显示:
chcp 65001
该设置仅对当前打开的终端窗口生效,关闭终端后会恢复默认配置。
永久修复IntelliJ内置终端编码
- 打开IntelliJ设置,依次进入
Tools > Terminal配置页 - 找到Shell path配置项,在原有PowerShell路径后追加启动参数,让终端启动时自动切换到UTF-8代码页,配置示例:
powershell.exe -NoExit -Command "chcp 65001" - 保存配置后关闭所有已打开的内置终端标签,重新打开终端即可默认使用UTF-8编码。
强制JVM输出编码统一
不管终端默认编码是什么,启动Java程序时追加以下JVM参数,强制JVM标准输出、错误流都使用UTF-8编码,从输出端避免编码错位:
-Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8
如果是Maven、Gradle项目,可以把该参数配置到构建工具的全局JVM配置中,不需要每次启动手动添加。
一劳永逸方案
旧版Windows PowerShell(5.1及以下版本)本身编码逻辑设计陈旧,对UTF-8的兼容性很差,建议直接安装PowerShell 7+版本,安装完成后在IntelliJ终端设置里把Shell path替换为新版PowerShell的pwsh.exe路径,新版PowerShell原生默认支持UTF-8编码,不需要额外调整代码页配置即可解决各类特殊字符乱码问题。
内容的提问来源于stack exchange,提问作者SeleniumUser
相关产品推荐
相关产品推荐

