解决 Linux 终端中文文件名及路径乱码问题

在日常使用 Linux 终端查阅和管理文件时,我们偶尔会遇到包含中文字符的文件名或路径无法正确显示、呈现各种乱码的现象。本文将简单记录遇到这一问题的原因分析及修复过程。

问题描述

在学校服务器终端中执行诸如 ls 等读取目录的命令时,中文文件名或路径没法正确显示,有些还会抛出类似于 Cannot set LC_CTYPE to default locale 的警告提示。由于终端配置的缺陷,原本正常的中文文件名被解析成无法辨认的乱码或者以各种转义字符的形式出现:

报错与乱码截图

原因分析

出现该问题的主要原因是:当前的 Linux 系统语言环境(Locale)未能正确加载对 UTF-8 的支持

具体表现为系统中虽然 LANG 环境变量被设置成了 en_US.UTF-8 ,但是系统内核里尚未生成对应的 Locale 文件

当遇到这种配置不一致的情况时,系统为了保证基础指令的运行,会导致终端回退到纯英文的传统 C 环境。由于 C 环境仅支持标准的 ASCII 字符集而不能处理多字节编码(如 UTF-8 编码的中文字符),于是系统只能强行将所有非英文字符全部执行转义,最终我们在屏幕上看到的效果即是“乱码”。

解决方案

要解决这个问题,我们需要强制终端系统采用支持 UTF-8 的通用 Locale(即 C.UTF-8)。

最简单的做法就是将这两个环境变量配置直接写入到当前终端所在的配置文件中(以 bash 为例即 ~/.bashrc)。这样每次打开命令行终端时系统都能自动加载正确的语言环境。

请在终端中依次运行以下三条命令即可完成修复:

1
2
3
4
5
6
# 1. 将 Locale 环境配置追加写入到 bashrc 配置文件中
echo "export LC_ALL=C.UTF-8" >> ~/.bashrc
echo "export LANG=C.UTF-8" >> ~/.bashrc

# 2. 重新加载配置文件,使其在当前终端立即生效
source ~/.bashrc

补充说明:如果您使用的是 Zsh 终端,只需将上面命令中的 ~/.bashrc 替换为 ~/.zshrc 即可。

执行完毕后,再次查看曾出现乱码的文件路径,中文字符即可恢复正常显示!