webstorm terminal乱码需同步配置系统层(windows注册表设chcp 65001或linux/macos改webstorm.sh导出lang/lc_all)、jvm层(vmoptions和run configuration中均加-dfile.encoding=utf-8)及powershell输出编码(修改$profile设[console]::outputencoding),三者缺一不可。

WebStorm 的 Terminal 乱码和编辑器乱码是两套独立机制,只改 File Encodings 没用——Terminal 输出走的是系统 Shell + JVM 启动参数 + WebStorm 自身终端渲染三层逻辑,缺一不可。
Terminal 启动前必须加载 UTF-8 环境变量
Windows 下 GUI 启动的 WebStorm 不会继承命令行的 LANG 或 LC_ALL;macOS/Linux 下即使终端里 echo $LANG 显示 zh_CN.UTF-8,WebStorm 内置 Terminal 仍可能读不到。
- Linux/macOS:编辑
bin/webstorm.sh,在#!/bin/sh下方**紧贴第一行**插入:
export LANG=zh_CN.UTF-8 export LC_ALL=zh_CN.UTF-8
- Windows:不依赖环境变量,靠注册表强制生效 —— 打开
regedit,定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor,新建字符串值Autorun,值设为chcp 65001(注意空格,不是等号) - 改完必须完全退出 WebStorm(包括托盘进程),再重启,否则变量不加载
Run Configuration 和 JVM 层编码要同步设为 UTF-8
Terminal 里手动执行 java -XshowSettings:properties -version 2>&1 | grep file.encoding 查到的 file.encoding 值,必须和 Run 配置里的一致。否则 console.log("中文") 或 System.out.println("中文") 依然乱码。
- 打开
Run > Edit Configurations - 选中你的脚本或服务配置,在
Configuration标签页的VM options输入框填入:-Dfile.encoding=UTF-8(大小写敏感,不能写utf8) - 同时检查
Environment variables区域是否也显式设置了file.encoding=UTF-8—— IDEA 系列常漏这一项 - 编辑
bin/webstorm64.vmoptions(Windows/macOS)或webstorm.vmoptions(Linux),追加一行:-Dfile.encoding=UTF-8
Terminal 字体设置不影响编码,但影响中文能否显示出来
如果 Terminal 里中文显示为“□□□”,不是编码错了,而是字体没 fallback 到中文字体;此时改编码无济于事,得调字体。
- 路径:
Settings → Tools → Terminal → Font,不是 Editor 或 Appearance 里的设置 - 必须勾选
Override IDE font,否则改 Size/Font 没反应 - 推荐等宽字体:
JetBrains Mono、Fira Code、Cascadia Code;禁用Enable font ligatures避免模糊 - 字体大小建议从
14起调;高分屏可设为16或18 - 注意:该设置绑定在当前配色方案下,换主题(如 Darcula → Light)后需重新确认是否仍启用
Override IDE font
PowerShell 用户额外注意输出编码
PowerShell v1/v7 默认不按 UTF-8 输出,即使系统设了 chcp 65001,[Console]::OutputEncoding 仍可能是 GBK,导致 Node.js/Java 日志中文被截断或转义。
- 找到 PowerShell 配置文件:
$PROFILE(运行echo $PROFILE查路径) - 在文件末尾添加:
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 $PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
- 若用 PowerShell 7,还需加一句启用 tab 补全:
Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete - 执行
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser允许配置生效
真正容易被忽略的是:Terminal 乱码问题从来不是单点故障。它像一条流水线——Shell 启动时没加载 UTF-8 变量,JVM 启动时没传 -Dfile.encoding=UTF-8,PowerShell 运行时没设 [Console]::OutputEncoding,三者只要断一环,中文就卡在半路变成问号或方块。











