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

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内置终端编码

  1. 打开IntelliJ设置,依次进入Tools > Terminal配置页
  2. 找到Shell path配置项,在原有PowerShell路径后追加启动参数,让终端启动时自动切换到UTF-8代码页,配置示例:
    powershell.exe -NoExit -Command "chcp 65001"
    
  3. 保存配置后关闭所有已打开的内置终端标签,重新打开终端即可默认使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:45:25