必须同时设置LANG=zh_CN.UTF-8和LC_ALL=zh_CN.UTF-8两个环境变量,仅加-Dfile.encoding=UTF-8不够,因JVM不控制终端字节流解码,需环境变量确保系统locale与终端一致。

为什么改了VM Options还是输出问号?
因为只加 -Dfile.encoding=UTF-8 不够——它只影响 JVM 内部字符串编码,不控制进程向终端写入字节流时的环境上下文。如果系统 locale 是 C 或 en_US(无 UTF-8),终端底层仍用 ASCII 解码,中文照样变问号。
VM Options 必须配合哪两个环境变量?
在 Run > Edit Configurations 中,除了 VM options 填 -Dfile.encoding=UTF-8,还必须在同一个配置的 Environment variables 区域显式添加:
-
LANG=zh_CN.UTF-8(或en_US.UTF-8,只要带 UTF-8) -
LC_ALL=zh_CN.UTF-8(强制覆盖所有 locale 子项)
漏掉任一个,PHP 脚本里 echo "中文" 或 var_dump("测试") 都可能吐问号。
Linux/macOS 下还要改启动脚本吗?
要。PhpStorm 自带的 JVM 启动时不会自动继承 shell 的 LANG,尤其通过桌面图标启动时。必须编辑 bin/phpstorm.sh,在 #!/bin/sh 下**紧贴第一行**插入:
立即学习“PHP免费学习笔记(深入)”;
export LANG=zh_CN.UTF-8 export LC_ALL=zh_CN.UTF-8
Windows 用户不用改脚本,但需同步注册表 Autorun 设 chcp 65001,否则 CMD 底层仍是 GBK。
验证是否真正生效的两行命令
别信设置界面,运行时才作数:
- 在 WebStorm Terminal 执行:
php -r "echo getenv('LANG'), PHP_EOL;"—— 输出必须含UTF-8 - 在 PHP 脚本里加:
echo mb_internal_encoding(), PHP_EOL;—— 输出应为UTF-8(不是ISO-8859-1)
两项都达标,echo "你好" 才不会变成 ??。文件本身是 UTF-8、IDE 显示正常,只是运行窗口乱码?那基本就是这两处没对齐。


















