1. 引言
在使用 Ubuntu 时,您可能会偶尔遇到乱码问题。这些问题可能出现在各种情况下,例如终端输出、显示日文文件名,或在浏览器中查看日文网页。在许多情况下,默认配置下日文文本可能无法正确显示,因此正确的设置至关重要。
本文解释了 Ubuntu 中乱码的原因,并提供了具体的解决方案来解决它们。本指南针对以下用户:
- 没有配置日文语言支持而使用 Ubuntu 的初学者
- 想要了解乱码根本原因并寻求根本解决方案的用户
- 在终端或 GUI 环境中遇到乱码并想知道如何修复的用户
让我们从回顾 Ubuntu 中乱码的主要原因开始。
2. 乱码的主要原因
区域设置不正确
Ubuntu 中的区域设置定义了与语言、日期格式和其他区域行为相关的系统设置。当这些设置不正确时,日文文本可能无法正确显示,从而导致乱码。
例如,如果运行 locale 命令显示的值如“C”或“POSIX”,则系统区域设置未正确配置:
$ locale
LANG=C
LC_ALL=
理想情况下,日文环境应显示如 LANG=ja_JP.UTF-8 之类的设置。
缺少或未配置字体
在某些默认的 Ubuntu 安装中,日文字体可能不可用,导致日文文本显示为空心方块 (□) 或不可读的符号。
此问题通常发生在以下场景中:
- GUI 应用程序中的菜单项和按钮显示损坏
- 在文本编辑器中打开日文文本时显示乱码
字符编码不匹配
Ubuntu 主要使用 UTF-8 编码。当打开使用 Shift_JIS 或 EUC-JP 编码的文件——这些在旧版 Windows 或 UNIX 系统中常见——时,可能会发生文本损坏。
典型问题包括:
- 文本编辑器在打开日文文件时显示奇怪的符号
cat命令的输出在终端中显示损坏
终端或编辑器配置错误
即使文件正确编码为 UTF-8,终端或编辑器的配置错误仍可能导致显示问题。
- 终端编码设置为非
UTF-8 - Vim 或 VSCode 等编辑器无法自动检测字符编码
- 通过
less或cat查看时,日文字符显示为“?”或“◇”
3. 检查和修复区域设置
如何检查区域设置
要检查当前的区域设置配置,请运行以下命令:
locale
示例输出:
LANG=C
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=
在这种情况下,LANG=C 表示未启用日文支持。对于正确的日文配置,您应该看到如下值:
LANG=ja_JP.UTF-8
LC_ALL=ja_JP.UTF-8
安装和设置日文区域设置
1. 检查并添加日文区域设置
要确认系统中是否可用日文区域设置,请运行以下命令:
locale -a | grep ja_JP
示例输出:
ja_JP.eucJP
ja_JP.utf8
如果未列出 ja_JP.utf8,则必须安装日文区域设置包。
使用以下命令安装它:
sudo apt update
sudo apt install -y language-pack-ja
然后启用区域设置:
sudo locale-gen ja_JP.UTF-8
sudo update-locale LANG=ja_JP.UTF-8
2. 系统范围应用区域设置
要将区域设置更改应用到整个系统,请运行以下命令:
export LANG=ja_JP.UTF-8
export LC_ALL=ja_JP.UTF-8
要使这些更改持久化,请将它们添加到 ~/.bashrc 或 ~/.profile:
.
echo 'export LANG=ja_JP.UTF-8' >> ~/.bashrc
echo 'export LC_ALL=ja_JP.UTF-8' >> ~/.bashrc
source ~/.bashrc
如果您想将设置应用于所有用户,请编辑以下文件:
sudo nano /etc/default/locale
添加或更新以下条目:
LANG=ja_JP.UTF-8
LC_ALL=ja_JP.UTF-8
要应用设置,请注销并重新登录,或重启系统。
4. 安装与配置日文字体
为什么需要日文字体
在默认的 Ubuntu 环境中,可能未安装日文字体。没有这些字体,日文文本会显示为空方块或不可辨认的符号。
您可以在以下情况下确认缺少字体:
- 菜单标签和 GUI 按钮显示乱码
- 在文本编辑器中打开时,日文文本出现损坏
推荐的日文字体
以下日文字体可在 Ubuntu 中使用:
| Font Name | Description |
|---|---|
| Noto Sans CJK JP | A high-quality Japanese font provided by Google (recommended as default) |
| Takao Fonts | The former default fonts in Ubuntu, available in regular and bold styles |
| IPA Fonts | High-quality fonts provided by the Information-technology Promotion Agency (IPA) |
| VL Gothic (VLゴシック) | Highly readable, ideal for terminal environments |
如何安装日文字体
1. Noto Sans CJK JP(推荐默认)
sudo apt update
sudo apt install -y fonts-noto-cjk
2. Takao 字体
sudo apt install -y fonts-takao
3. IPA 字体
sudo apt install -y fonts-ipafont
4. VL Gothic(用于终端)
sudo apt install -y fonts-vlgothic
安装完成后,重启系统或刷新字体缓存:
fc-cache -fv
如何配置字体
在 GUI 应用程序中配置字体
- 打开 “设置” 应用程序
- 前往 “字体” 部分
- 将 “标准字体”、 “文档字体” 和 “等宽字体” 更改为您喜欢的字体
- 注销并重新登录以应用更改
在终端中配置字体
- 打开终端
- 从菜单中选择 “首选项”
- 打开 “配置文件” 设置并启用 “使用自定义字体”
- 选择您喜欢的字体(例如 Noto Sans Mono CJK JP)
- 保存设置并重新启动终端
验证字体配置
要确认字体已正确应用,请执行以下步骤:
- 使用
fc-list检查已安装的字体fc-list | grep "Noto"
- 在终端中验证日文显示
echo "こんにちは、Ubuntuの文字化け対策"
- 在 Firefox、LibreOffice 等 GUI 应用程序中确认日文文本渲染
5. 检查与转换字符编码
什么是字符编码?
字符编码定义了字符在数字世界中的表示方式。常见的编码包括:
| Encoding | Characteristics | Main Usage |
|---|---|---|
| UTF-8 | Multi-language support; standard in Linux | Ubuntu and web development |
| Shift_JIS | Japanese-focused; standard in Windows environments | Windows apps and legacy systems |
| EUC-JP | Previously used in UNIX-based systems | Older Linux distributions |
| ISO-2022-JP | Used in some mail systems | Email communication |
由于 Ubuntu 默认使用 UTF-8 编码,打开其他编码格式的文件可能会导致乱码。
如何检查文件的字符编码
1. 使用 file 命令
file -i sample.txt
示例输出:
sample.txt: text/plain; charset=iso-8859-1
2. 使用 nkf 命令
sudo apt install -y nkf
nkf --guess sample.txt
示例输出:
Shift_JIS (CRLF)
如何转换字符编码
1. 使用 iconv 命令
示例:将 Shift_JIS 转换为 UTF-8
iconv -f SHIFT_JIS -t UTF-8 sample.txt -o sample_utf8.txt
示例:将 EUC-JP 转换为 UTF-8
iconv -f EUC-JP -t UTF-8 sample.txt -o sample_utf8.txt
2. 使用 nkf 命令
示例:将 Shift_JIS 转换为 UTF-8
nkf -w sample.txt > sample_utf8.txt
示例:将 EUC-JP 转换为 UTF-8
nkf -w --overwrite sample.txt
防止终端和编辑器出现乱码
1. 使用 less 正确显示编码
export LESSCHARSET=utf-8
less sample.txt
2. 在 vim 中指定编码打开文件
vim -c "set encoding=utf-8" sample.txt
3. 在 gedit 或 VSCode 中修改字符编码
- gedit(GNOME 默认编辑器)
- 使用
gedit sample.txt打开文件 - 保存时,在 “编码” 下拉框中选择
UTF-8
- VSCode(Visual Studio Code)
- 点击窗口底部的“编码”指示器
- 选择
UTF-8来转换文件

6. 检查终端和编辑器设置
验证并调整终端设置
1. 检查终端编码
要确认您的区域设置,请运行以下命令:
echo $LANG
echo $LC_ALL
示例输出(正确配置)
ja_JP.UTF-8
ja_JP.UTF-8
如果输出显示 C 或 POSIX,请将区域设置更改为 ja_JP.UTF-8。
2. 配置终端字体
GNOME Terminal (Ubuntu 默认终端)
- 打开终端
- 选择 “首选项”
- 打开 “配置文件” 并导航到“文本”选项卡
- 启用 “使用自定义字体” 并选择以下之一:
- Noto Sans Mono CJK JP
- VL Gothic
- Takao Gothic
- 保存您的设置并重启终端
配置编辑器编码
1. Vim 编码设置
打开 Vim 并运行以下命令来检查当前编码:
:set encoding?
:set fileencoding?
示例输出:
encoding=utf-8
fileencoding=utf-8
如果设置与 utf-8 不同,请使用以下内容更新 ~/.vimrc:
set encoding=utf-8
set fileencodings=utf-8,sjis,euc-jp
set fileformats=unix,dos,mac
2. Nano 编码设置
要更改默认编码,请将以下内容添加到 ~/.nanorc:
set encoding "utf-8"
3. VSCode 编码设置
- 点击右下角的 “编码” 指示器
- 选择 “使用编码重新打开” 并选择
UTF-8 - 如需, 选择 “使用编码保存”
要将 UTF-8 设置为默认,请将以下内容添加到 settings.json:
"files.encoding": "utf8"
7. 特定情况的解决方案
防止 GUI 应用程序中的乱码
1. Firefox 或 Chrome 中日文字符显示不正确
解决方案:
- 安装所需的日文字体
sudo apt install -y fonts-noto-cjk fonts-ipafont
- 检查并更新浏览器字体设置
-
Firefox: wp:list {“ordered”:true} /wp:list
- 访问
about:preferences - 打开“字体和颜色” → “高级”
-
将“比例” 和 “等宽” 字体均设置为
Noto Sans CJK JP* Google Chrome: wp:list {“ordered”:true} /wp:list -
访问
chrome://settings/fonts - 将“标准字体”和“等宽字体”更改为
Noto Sans CJK JP
- 访问
2. LibreOffice 中的乱码
解决方案:
- 安装日文字体,例如
fonts-noto-cjk或fonts-ipafont - 更改 LibreOffice 字体设置
- 转到“工具” → “选项” → “LibreOffice” → “字体”
- 将默认字体设置为
Noto Sans CJK JP
防止 CUI 环境中的乱码
1. SSH 会话显示乱码字符
解决方案:
- 检查远程服务器的区域设置
locale
- 如果未设置为
ja_JP.UTF-8,请运行以下命令:sudo apt install -y language-pack-ja sudo locale-gen ja_JP.UTF-8 sudo update-locale LANG=ja_JP.UTF-8
防止特定应用程序中的乱码
1. WSL (Windows Subsystem for Linux) 显示乱码日文
解决方案:
- 配置 WSL 使用
ja_JP.UTF-8echo 'export LANG=ja_JP.UTF-8' >> ~/.bashrc echo 'export LC_ALL=ja_JP.UTF-8' >> ~/.bashrc source ~/.bashrc
- 将 Windows Terminal 字体设置为
Noto Sans Mono CJK JP
2. Docker 容器内部的乱码日文
解决方案:
- 进入容器并检查区域设置
docker exec -it container_name bash locale
- 如果缺少,请添加日文区域设置
apt update && apt install -y locales locale-gen ja_JP.UTF-8 export LANG=ja_JP.UTF-8 export LC_ALL=ja_JP.UTF-8
8. 常见问题解答 (FAQ)
Q1. 我正确配置了区域设置,但仍出现乱码。
A: 再次验证区域设置:
locale
如果未设置 LANG=ja_JP.UTF-8,请使用以下命令重新配置:
sudo update-locale LANG=ja_JP.UTF-8
sudo locale-gen ja_JP.UTF-8
sudo dpkg-reconfigure locales
Q2. 只有某些文件显示乱码。
A: 不同的文件可能使用不同的字符编码。检查编码:
file -i sample.txt
如果文件不是 UTF-8,请转换它:
iconv -f SHIFT_JIS -t UTF-8 sample.txt -o sample_utf8.txt
或者,使用 nkf:
nkf -w --overwrite sample.txt
Q3. 我无法在终端输入日文字符。
A: 确保已安装日文输入法(Fcitx 或 IBus)。
sudo apt update
sudo apt install -y fcitx-mozc
im-config -n fcitx
Q4. 在 WSL 中日文显示乱码。
A: 在 WSL 中设置区域设置:
echo 'export LANG=ja_JP.UTF-8' >> ~/.bashrc
echo 'export LC_ALL=ja_JP.UTF-8' >> ~/.bashrc
source ~/.bashrc
Q5. 在 Docker 容器内日文显示乱码。
A: 如果区域设置为 C.UTF-8,日文将无法正确显示。
apt update && apt install -y locales
locale-gen ja_JP.UTF-8
export LANG=ja_JP.UTF-8
export LC_ALL=ja_JP.UTF-8
Q6. GUI 菜单和对话框显示乱码的日文。
A: 安装字体并更改字体设置:
sudo apt install -y fonts-noto-cjk fonts-ipafont
9. 总结
本文详细说明了 Ubuntu 中乱码问题 的原因和解决方案。乱码通常是由于区域设置配置错误、缺少字体、字符编码不匹配或终端/编辑器配置不当导致的。不过,通过适当的调整,这些问题可以有效解决。
1. 乱码的主要原因
- 区域设置配置错误:如果系统区域设置为
C或POSIX,日文无法正确显示 - 未安装字体:没有日文字体,GUI 应用和终端无法正确渲染日文字符
- 编码不匹配:打开以不同编码(例如 Shift_JIS)保存的文件会导致乱码
- 终端/编辑器设置不当:如果编码未设置为 UTF-8,日文可能无法正确显示
2. 防止乱码的解决方案
| Item | Solution |
|---|---|
| Locale configuration | Check with locale and run update-locale LANG=ja_JP.UTF-8 |
| Font installation | sudo apt install -y fonts-noto-cjk fonts-ipafont |
| Check file encoding | Use file -i or nkf --guess |
| Convert encoding | iconv -f SHIFT_JIS -t UTF-8 filename -o newfile |
| Terminal configuration | Set LESSCHARSET=utf-8 and change fonts to Noto Sans Mono CJK JP |
| Fix GUI garbled text | Set fonts to Noto Sans CJK JP and use gnome-tweaks if needed |
| Fix WSL garbled text | Set ja_JP.UTF-8 and configure fonts |
| Fix Docker garbled text | Run locale-gen ja_JP.UTF-8 and configure locale in Dockerfile |
3. 其他建议
- 保持系统更新:过时的包可能会在日文环境中导致问题
sudo apt update && sudo apt upgrade -y
- 持久化设置:将区域设置添加到
~/.bashrc或~/.profile,以在登录时自动生效 - 备份配置文件:在编辑
/etc/default/locale等文件之前,请先备份
结论
通过正确配置四个关键组件:区域设置、字体、字符编码和终端/编辑器设置,Ubuntu 的乱码问题即可得到解决。按照本指南中介绍的方法,无论是在终端会话、GUI 应用、WSL 还是 Docker 容器中,都可以消除几乎所有的乱码问题。
