Linux终端的中文变成了横线,怎么解决

诸神缄默不语-个人技术博文与视频目录

这个具体场景是我们公司的Linux服务器终端的中文突然变成横线了,明明几天前还能正常显示中文的?

总之具体的事故原因也没有排查出来,目前的怀疑是不知道哪个同事跑了什么现成的脚本把环境变量给覆盖了。

但是直接的原因是可以排查出来的:在终端运行locale命令可以发现所有语言设置都变成了POSIX,而不是UTF-8:

LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

说明是Linux系统的问题,而不是我使用的SSH客户端设置有误、字体文件损坏或者别的什么的问题。

在Linux的locale上下文中,POSIX代表一种最简化的“默认”区域设置,它仅支持ASCII字符(无法显示中文等非ASCII字符)。

正常能显示中文的UTF-8环境的输出应该长这样:

LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
...

解决方案:

  1. 临时解决(只对当前终端起作用):export LANG=zh_CN.UTF-8
  2. 长久解决:
    (需要注意查看 ~/.bashrc~/.bash_profile~/.profile/etc/profile 中是否覆盖了 LANG 或 LC_* 变量:grep -E "LANG|LC_" ~/.bashrc ~/.bash_profile ~/.profile /etc/profile确保没有类似 export LANG=C 的设置)
    1. 方法一:
      1. 编辑locale生成列表,取消注释zh_CN.UTF-8
        sudo sed -i 's/# zh_CN.UTF-8 UTF-8/zh_CN.UTF-8 UTF-8/' /etc/locale.gen
      2. 生成locale
        sudo locale-gen
      3. 更新系统Locale默认设置
        sudo update-locale LANG=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8
    2. 方法二:echo "LANG=zh_CN.UTF-8" | sudo tee /etc/default/locale
    3. 方法三:在/etc/locale.conf ~/.bashrc~/.bash_profile 中添加:LANG="zh_CN.UTF-8"
      保存后执行:
      source ~/.bashrc   # 或重启终端
      sudo locale-gen zh_CN.UTF-8   # 生成语言环境(Debian/Ubuntu)
      
      (这个就相当于将临时修改环境变量的操作进行了持久化)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诸神缄默不语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值