You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu WSL切换至fish shell后终端应用字符编码异常问题

Ubuntu WSL切换至fish shell后终端应用字符编码异常问题

我之前在WSL Ubuntu里折腾fish shell时也踩过这个一模一样的坑!当时也是fish自身显示中文啥的都正常,一打开vim就乱码,折腾了半天才搞明白是环境变量的锅,给你分享下解决思路和实操方法:

首先先确认下问题的核心:你碰到的情况是——

  • 在bash和fish终端里直接输入非ASCII字符(比如中文、特殊符号)都能正常显示
  • 从bash启动vim,输入和显示非ASCII字符完全正常;但从fish启动vim后,非ASCII字符就会显示成乱码

从你贴的bash环境下的locale输出来看,bash的编码设置是完全正确的:

jan@HSD-PF540YBG:~$ locale
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=

问题出在fish shell没有正确继承或设置编码相关的环境变量!fish自身对编码的处理比较“聪明”,但它启动子进程(比如vim)时,不会自动把所有必要的locale变量传过去,导致vim用了错误的编码解析字符,最终乱码。

给你一套亲测有效的解决步骤:

  1. 先检查fish里的locale设置
    在fish终端里运行locale命令,看看输出里的LANG和所有LC_*变量是不是都设置成了C.UTF-8。如果有变量是空的或者是其他非UTF-8的取值,那就是问题根源了。

  2. 强制给fish设置正确的编码环境变量
    编辑fish的全局配置文件~/.config/fish/config.fish,在文件末尾添加以下两行:

    set -x LANG C.UTF-8
    set -x LC_ALL C.UTF-8
    

    保存文件后,输入exec fish重启fish shell,或者用source ~/.config/fish/config.fish重新加载配置。

  3. 验证修复效果
    现在再打开vim,输入非ASCII字符试试,应该就能正常显示了;同时再运行locale确认所有变量都正确设置为C.UTF-8。

  4. 额外小提醒
    还要确保你用的Windows终端(比如Windows Terminal、CMD)本身的默认编码是UTF-8,避免WSL和Windows终端之间的编码不匹配导致的二次乱码。

备注:内容来源于stack exchange,提问作者janeden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 12:09:50