openclaw在macos终端中文显示为方块或问号,根源是node.js进程i/o流未显式声明utf-8编码,需修改主入口脚本插入process.stdout/stderr/stdin.setencoding("utf8")并重建依赖,再配合node_options环境变量注入方可彻底解决。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

OpenClaw在macOS终端中显示中文为方块、问号或空格,不是字体问题也不是路径错误,而是Node.js进程内部I/O流未显式声明UTF-8编码,导致系统环境变量生效但底层读写仍走默认locale fallback路径——这正是最隐蔽的乱码根源。
验证是否命中隐藏编码问题
在终端执行:openclaw models list,若输出中模型名称显示为??????或〹类HTML实体,且locale | grep UTF-8已确认LANG=en_US.UTF-8,说明问题出在OpenClaw自身Node.js运行时未强制指定编码。
这一步必须先做,否则后续所有环境配置都只是治标——因为OpenClaw启动后会缓存初始编码策略,重启终端无效。
修改OpenClaw主入口文件(永久生效)
找到OpenClaw全局安装的主入口脚本位置:
which openclaw
通常返回/usr/local/bin/openclaw或$(npm prefix -g)/bin/openclaw。用编辑器打开该文件(需sudo权限)。
定位到以#!/usr/bin/env node开头的行下方,插入以下两行(位置不能错):
process.env.NODE_OPTIONS = "--experimental-strip-types";process.stdout.setEncoding("utf8"); process.stderr.setEncoding("utf8"); process.stdin.setEncoding("utf8");
【必须紧接在shebang之后、任何require之前】,否则Node.js已初始化I/O流,设置无效。
重装核心依赖并刷新缓存
进入OpenClaw项目目录(非全局bin目录):
cd $(npm prefix -g)/lib/node_modules/openclaw
删除现有node_modules并强制重建:
rm -rf node_modulesNODE_OPTIONS="--enable-source-maps" npm install --no-package-lock --ignore-scripts
PyCharm 2026.2.0.1 Mac版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合在macOS系统上进行 Python 项目开发、运行、调试和测试。
这一步绕过npm缓存中的旧版buffer处理逻辑,确保新编码声明被所有子模块继承。跳过--ignore-scripts会导致预编译脚本用旧编码加载配置,乱码复现。
终端级双保险配置(补漏)
方法一:直接注入环境变量启动
不运行openclaw命令,改用:
NODE_OPTIONS="--experimental-strip-types" LANG=en_US.UTF-8 openclaw gateway run
方法二:Zsh函数封装(推荐日常使用)
在~/.zshrc末尾添加:
alias oc="NODE_OPTIONS='--experimental-strip-types' LANG=en_US.UTF-8 openclaw"oc() { NODE_OPTIONS="--experimental-strip-types" LANG=en_US.UTF-8 command openclaw "$@"; }
执行source ~/.zshrc后,所有oc命令自动携带编码上下文,无需每次手动拼接。
验证最终效果
第一步:重启终端(彻底清除旧shell环境)
第二步:执行oc models list
第三步:观察输出中中文模型名(如“通义千问”“DeepSeek-V3”)是否正常显示,无方块、无问号、无截断。
第四步:查看日志文件~/.openclaw/logs/gateway.log,搜索中文关键词,确认日志内容亦为UTF-8原样记录。









