← Electerm 博客

electerm 连接特殊字符编码的服务器(GBK、Big5、Shift_JIS 等)

2026-10-10
编码gbkbig5shift-jissshsftptelnetftp故障排除

electerm 连接特殊字符编码的服务器

连上一台老服务器,终端里全是 �、???? 或者 ÖÐÎÄ,SFTP 里的文件名像一堆乱码。其实什么都没坏——服务器用的是 GBK、Big5、Shift_JIS 之类的非 UTF-8 字符集,而客户端默认按 UTF-8 处理。

electerm 提供了按书签配置的编码设置,也在终端底部状态栏提供了快速切换,方便不改书签先试一试。本文以 GBK 为例,其他编码的步骤完全一样。

步骤 1:在书签中设置编码

打开 SSH 书签编辑界面,设置两个字段:

  1. 编码 —— 在列表中选择 gbk。
  2. 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 和所选字符集创建,路径名的编码和解码保持一致。文件夹传输也使用同一设置。

乱码排查

  1. 确认服务器用什么编码。 在会话中执行:

    locale
    echo $LANG
    

    值以 .GBK、.GB18030、.BIG5、.SJIS 或 .eucJP 结尾,就能看出字符集。

  2. 让编码与之匹配。 书签中的编码必须等于服务器的真实字符集。不确定时,用底部切换器找出显示正常的那个。

  3. 同时设置 ENV:LANG。 如果服务器不接受该区域设置,先在服务器上安装(locale -a 可列出已有的),否则 shell 会回退到 C 或 POSIX。

  4. 重新连接。 书签的更改在下次连接时生效。

  5. 别忘了文件内容只是字节。 electerm 解决的是显示和文件名。用 GBK 保存的文本文件,在 UTF-8 编辑器里打开依然会乱码——那是编辑器的编码,不是连接的编码。

注意事项

  • 如果服务器是 UTF-8,编码保持 utf-8,ENV:LANG 用类似 en_US.UTF-8 的值即可。给 UTF-8 服务器设置旧编码反而会造成乱码。
  • GBK 与 GB2312 并不相同,但 GBK 是其超集,所以两者都可以选 gbk。如果还需要生僻字,请使用 gb18030。
  • 环境变量 LANG 只作用于该 SSH 会话,不会永久改变服务器上的任何设置。

长期运行的服务器、网络设备和嵌入式设备上,旧字符集不会消失。有了书签里的一项设置,electerm 就能把它们当成普通连接来处理。