electerm 连接特殊字符编码的服务器
连上一台老服务器,终端里全是 �、???? 或者 ÖÐÎÄ,SFTP 里的文件名像一堆乱码。其实什么都没坏——服务器用的是 GBK、Big5、Shift_JIS 之类的非 UTF-8 字符集,而客户端默认按 UTF-8 处理。
electerm 提供了按书签配置的编码设置,也在终端底部状态栏提供了快速切换,方便不改书签先试一试。本文以 GBK 为例,其他编码的步骤完全一样。
步骤 1:在书签中设置编码
打开 SSH 书签编辑界面,设置两个字段:
- 编码 —— 在列表中选择
gbk。 - ENV:LANG —— 设置为对应的区域设置,例如
zh_CN.GBK(请使用服务器上实际存在的 GBK 区域设置)。
为什么两个都要设?它们的作用不同:
- 编码 告诉 electerm 如何把字节转换成字符,以及反向转换。
- ENV:LANG 告诉 服务器上的 shell 使用哪种区域设置,这样
ls、man、vim等程序输出的才是同一种字符集。两者不一致的话,即使设置"看起来对",依然会乱码。
保存书签并连接。
步骤 2:连接服务器
书签配置正确后:
- 终端输出 按 GBK 解码,中文正常显示。
- 你的输入 在发送前按 GBK 编码。比如在
echo或文件名里输入你好,服务器收到的是它期望的字节,而不是 UTF-8。 - SFTP 文件名 使用相同的编码,包含中文名的远程目录可以正常列出、重命名、上传和下载。
更改会在使用更新后的书签重新连接时生效。
即时切换编码
你不一定一开始就知道正确的字符集。终端底部状态栏有一个编码选择器(移动端是一个翻译图标,点开是菜单)。选择另一种编码后,终端会立即切换解码方式,在当前会话中生效,无需重连。
这是弄清服务器真实编码最快的办法:依次试 gbk、big5、shift-jis、euc-kr,直到文字可读,再把选中的编码写进书签。
注意:底部切换器改变的是当前标签页的输出解码方式。要永久生效,请在书签中设置。
支持的编码
列表包括:
utf-8(默认)- 简体中文:
gbk、gb2312、gb18030、hz-gb-2312 - 繁体中文:
big5 - 日文:
shift-jis、euc-jp、iso-2022-jp - 韩文:
euc-kr、iso-2022-kr - Unicode 变体:
utf-16le、utf-16be - 西欧 / 中欧:
iso-8859-*系列和windows-125x代码页 - 西里尔及其他:
koi8-r、koi8-u、ibm866、windows-1251、windows-874、macintosh等
哪些连接类型支持
以下书签表单中有编码字段:
- SSH —— 终端和 SFTP
- Telnet —— 终端输入按同样方式编码
- FTP —— 文件名会在所选编码与 FTP 控制连接之间转换
底层是怎么工作的
感兴趣的话,原理很简单:
- 输出(服务器 → 你): 终端使用按标签页编码创建的流式
TextDecoder。流式很重要:一个 GBK 或 Shift_JIS 的多字节字符可能被拆在两个网络包里,解码器会先保留不完整的字节,等后续数据到达再拼起来。 - 输入(你 → 服务器): 在应用端,按键内容写入通道前通过
iconv-lite转换。对utf-8(及其别名)不做转换。万一转换失败,electerm 会回退为直接写入原始文本,而不是丢掉你的输入。 - SFTP: 当编码不是 UTF-8 时,SFTP 层会带着
iconv-lite和所选字符集创建,路径名的编码和解码保持一致。文件夹传输也使用同一设置。
乱码排查
确认服务器用什么编码。 在会话中执行:
locale echo $LANG值以
.GBK、.GB18030、.BIG5、.SJIS或.eucJP结尾,就能看出字符集。让编码与之匹配。 书签中的编码必须等于服务器的真实字符集。不确定时,用底部切换器找出显示正常的那个。
同时设置 ENV:LANG。 如果服务器不接受该区域设置,先在服务器上安装(
locale -a可列出已有的),否则 shell 会回退到C或POSIX。重新连接。 书签的更改在下次连接时生效。
别忘了文件内容只是字节。 electerm 解决的是显示和文件名。用 GBK 保存的文本文件,在 UTF-8 编辑器里打开依然会乱码——那是编辑器的编码,不是连接的编码。
注意事项
- 如果服务器是 UTF-8,编码保持
utf-8,ENV:LANG 用类似en_US.UTF-8的值即可。给 UTF-8 服务器设置旧编码反而会造成乱码。 GBK与GB2312并不相同,但 GBK 是其超集,所以两者都可以选gbk。如果还需要生僻字,请使用gb18030。- 环境变量
LANG只作用于该 SSH 会话,不会永久改变服务器上的任何设置。
长期运行的服务器、网络设备和嵌入式设备上,旧字符集不会消失。有了书签里的一项设置,electerm 就能把它们当成普通连接来处理。
