快速修复
# 一键:远程会话里确认/设置 UTF-8 locale,再重开 herdr
locale | grep -i utf-8 # 每个 LANG / LC_* 都应是 *.UTF-8
export LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 # 系统已生成 UTF-8 locale 时立即可用
你会遇到什么
通过 SSH 远程使用 herdr(或在 SSH 会话里跑 TUI)时,中文要么显示成乱码,要么根本输入不进去。你怀疑是 herdr 的 bug,实际上它更可能是终端链路里某一跳不是 UTF-8——从远程系统的 locale,到 tmux 类终端的编码开关,都可能吃掉中文。
本文路径:快速修复(30 秒一段命令)→ 一步步排查(可跳读)→ 原理与变体(症状/原因/证据)。赶时间直接跳到「快速修复」。
为什么会这样
先给结论:终端链路每一跳都可能不是 UTF-8,而 herdr 只是链条末端负责「渲染」的那一环。
链路:本地终端编码 → SSH(字节流传输,本身不编码)→ 远程 locale(LANG/LC_*)→ 终端复用器(tmux/screen 的 UTF-8 开关)→ 应用(herdr)渲染。
断点最常见在「远程 locale」:远程系统 locale 输出 C/POSIX(常见于容器和最小化安装)时,宽字符输入解码失败——表现就是乱码或丢输入。其次在终端复用器:tmux 默认按外层终端能力协商,老配置可能关掉 UTF-8。
实测:本环境无远端会话,未实测(如实标注);WSL 本地实测环境本身是 UTF-8(cli-smoke 会话正常)。
推论:排查顺序自远及近——先 locale 是否全为 UTF-8,再查 tmux 类终端面,最后才是本地终端编码与 herdr 本身;这三步能覆盖绝大多数「SSH 下中文坏了」。
一步步来
1. 确认远程 locale — 必做
locale 输出里 LANG/LC_* 应含 UTF-8(如 LANG=en_US.UTF-8 / zh_CN.UTF-8);出现 C/POSIX 即命中。
2. 让 SSH 会话带 UTF-8 环境 — 必做
在远端 shell 配置里导出 UTF-8 locale(或通过 SSH SendEnv/AcceptEnv 传递);最小化系统先用 localedef/发行版工具生成 zh_CN.UTF-8 或 en_US.UTF-8。
3. tmux/screen 类终端面 — 排查
tmux 下确认 UTF-8 已启用(老配置的 status-utf8 项;新版本按客户端能力自动协商)。
4. 区分是 herdr 还是终端层 — 排查
同一远程会话里 echo 中文 / cat 一个含中文的文件:终端层同样乱 = 不是 herdr 的问题。
怎么确认修好了
- 远程会话
echo 中文测试回显正常; - herdr TUI 内中文字符显示正常、输入不丢字。
其它环境的表现
- 容器 / 最小化安装:默认
Clocale 高发,先装 locale 再谈显示; - tmux 老配置:确认 UTF-8 开关;
症状
通过 SSH 远程使用 herdr 时,中文显示乱码或输入无效。
原因
与终端编码/远程 locale 相关(issue #3261 open,2026-08-26);非 herdr 本体缺陷信号。
解法
- 检查远程会话 locale:
locale应含UTF-8(如LANG=en_US.UTF-8/zh_CN.UTF-8)。 - SSH 终端编码统一 UTF-8;tmux 类终端面确认
set -g status-utf8(如适用)。
验证证据
- 素材:issue #3261(open,2026-08-26)匿名检索摘要。
- 本环境无远端会话,未实测(如实标注)。
适用工具 (1)
本问题方案已挂到下列工具的方案页——从工具页也能回到这里,双向可达。
herdr来源与证据
← 编码代理与终端 问题域 | 问题货架 | 遇到其它问题?去 问题空间 提交求助卡