atom script插件运行脚本输出中文乱码,根本原因是终端/解释器环境编码(如windows默认gbk)与文件utf-8编码不一致,需设置pythonioencoding=utf-8等环境变量或在command中加入chcp 65001,而非修改atom的default encoding设置。

Atom 里 script 插件运行脚本输出中文乱码,不是文件编码错了,而是 Atom 调用的终端/解释器环境编码和编辑器自身不一致——改 editor 设置没用,得动运行时环境。
script 插件执行 Python/JS 时中文变问号或方块
这是最常见的“假乱码”:文件本身是 UTF-8,Atom 显示正常,但 script 插件调起的 cmd、PowerShell 或 python 进程默认用系统 ANSI 编码(Windows 简体中文下就是 GBK),而 Python/Node.js 默认按环境编码解码 stdout,结果把 UTF-8 字节流当 GBK 解,必然错。
- Windows 下临时修复:在
script配置里把命令改成chcp 65001 && python -u %FILE%(chcp 65001切换 CMD 为 UTF-8 模式) - 更可靠的做法:设环境变量
PYTHONIOENCODING=utf-8(Python)或NODE_OPTIONS=--experimental-strip-types+ 终端编码同步(Node.js) - Linux/macOS 用户注意:
locale输出应含UTF-8,否则python启动时不自动设sys.stdout.encoding
Atom 的 Default Encoding 设置对运行输出完全无效
Settings → Core → Default Encoding 只控制新建文件保存用什么编码,不影响 script 插件 spawn 的子进程——它读的是系统环境变量、终端配置、解释器启动参数,和 Atom 的 core.encoding 配置毫无关系。
- 别在
config.cson里加encoding: "utf8"试图修复运行乱码,这行配置只管文件读写 - 也别开
Force UTF-8(encoding-selector 插件里),它只影响文件打开逻辑,对子进程 stdout 无任何作用 - 验证方式:在 Atom 里新建一个
test.py,内容为print("你好"),保存为 UTF-8;然后在系统终端直接运行python test.py—— 如果终端也乱码,问题就纯属环境层面
script 插件配置 command 字段时的编码陷阱
script 插件的 command 字段本质是 shell 命令字符串,它被 Atom 用 Node.js 的 child_process.spawn 执行,不经过 Atom 自身的编码层。所以:
- 路径含中文?确保整个路径(包括
python.exe位置)用 UTF-8 编码存储,且 Windows 系统区域设置允许 UTF-8(Win10 1903+ 可启用“Beta: Use Unicode UTF-8 for worldwide language support”) - 想传参带中文?避免在
command字段里硬编码中文,改用args数组传入,由 Node.js 自动处理编码转换 - Node.js 脚本输出乱码?在
command里加node --no-warnings --experimental-strip-types不够,必须保证process.env.NODE_OPTIONS或启动终端已设CHCP 65001
最易被忽略的一点:Atom 重启不等于子进程环境重载。改了系统环境变量(如 PYTHONIOENCODING)后,必须关掉所有 Atom 窗口并杀掉后台 atom.exe 或 Atom Helper 进程,否则旧环境变量仍被继承。运行前用 console.log(process.env) 在插件调试中确认变量是否生效,比猜强得多。











