如何修复 Ubuntu 上的乱码文本:完整的语言环境、字体和编码设置指南

目次

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_JISEUC-JP 编码的文件——这些在旧版 Windows 或 UNIX 系统中常见——时,可能会发生文本损坏。

典型问题包括:

  • 文本编辑器在打开日文文件时显示奇怪的符号
  • cat 命令的输出在终端中显示损坏

终端或编辑器配置错误

即使文件正确编码为 UTF-8,终端或编辑器的配置错误仍可能导致显示问题。

  • 终端编码设置为非 UTF-8
  • Vim 或 VSCode 等编辑器无法自动检测字符编码
  • 通过 lesscat 查看时,日文字符显示为“?”或“◇”

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 NameDescription
Noto Sans CJK JPA high-quality Japanese font provided by Google (recommended as default)
Takao FontsThe former default fonts in Ubuntu, available in regular and bold styles
IPA FontsHigh-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 应用程序中配置字体

  1. 打开 “设置” 应用程序
  2. 前往 “字体” 部分
  3. 将 “标准字体”、 “文档字体” 和 “等宽字体” 更改为您喜欢的字体
  4. 注销并重新登录以应用更改

在终端中配置字体

  1. 打开终端
  2. 从菜单中选择 “首选项”
  3. 打开 “配置文件” 设置并启用 “使用自定义字体”
  4. 选择您喜欢的字体(例如 Noto Sans Mono CJK JP
  5. 保存设置并重新启动终端

验证字体配置

要确认字体已正确应用,请执行以下步骤:

  1. 使用 fc-list 检查已安装的字体
    fc-list | grep "Noto"
    
  1. 在终端中验证日文显示
    echo "こんにちは、Ubuntuの文字化け対策"
    
  1. 在 Firefox、LibreOffice 等 GUI 应用程序中确认日文文本渲染

5. 检查与转换字符编码

什么是字符编码?

字符编码定义了字符在数字世界中的表示方式。常见的编码包括:

EncodingCharacteristicsMain Usage
UTF-8Multi-language support; standard in LinuxUbuntu and web development
Shift_JISJapanese-focused; standard in Windows environmentsWindows apps and legacy systems
EUC-JPPreviously used in UNIX-based systemsOlder Linux distributions
ISO-2022-JPUsed in some mail systemsEmail 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. 在 geditVSCode 中修改字符编码

  • gedit(GNOME 默认编辑器)
  1. 使用 gedit sample.txt 打开文件
  2. 保存时,在 “编码” 下拉框中选择 UTF-8
  • VSCode(Visual Studio Code)
  1. 点击窗口底部的“编码”指示器
  2. 选择 UTF-8 来转换文件

6. 检查终端和编辑器设置

验证并调整终端设置

1. 检查终端编码

要确认您的区域设置,请运行以下命令:

echo $LANG
echo $LC_ALL

示例输出(正确配置)

ja_JP.UTF-8
ja_JP.UTF-8

如果输出显示 CPOSIX,请将区域设置更改为 ja_JP.UTF-8

2. 配置终端字体

GNOME Terminal (Ubuntu 默认终端)

  1. 打开终端
  2. 选择 “首选项”
  3. 打开 “配置文件” 并导航到“文本”选项卡
  4. 启用 “使用自定义字体” 并选择以下之一:
  • Noto Sans Mono CJK JP
  • VL Gothic
  • Takao Gothic
  1. 保存您的设置并重启终端

配置编辑器编码

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 编码设置

  1. 点击右下角的 “编码” 指示器
  2. 选择 “使用编码重新打开” 并选择 UTF-8
  3. 如需, 选择 “使用编码保存”

要将 UTF-8 设置为默认,请将以下内容添加到 settings.json

"files.encoding": "utf8"

7. 特定情况的解决方案

防止 GUI 应用程序中的乱码

1. Firefox 或 Chrome 中日文字符显示不正确

解决方案:

  1. 安装所需的日文字体
    sudo apt install -y fonts-noto-cjk fonts-ipafont
    
  1. 检查并更新浏览器字体设置
  • Firefox: wp:list {“ordered”:true} /wp:list

    1. 访问 about:preferences
    2. 打开“字体和颜色” → “高级”
    3. 将“比例” 和 “等宽” 字体均设置为 Noto Sans CJK JP * Google Chrome: wp:list {“ordered”:true} /wp:list

    4. 访问 chrome://settings/fonts

    5. 将“标准字体”和“等宽字体”更改为 Noto Sans CJK JP

2. LibreOffice 中的乱码

解决方案:

  1. 安装日文字体,例如 fonts-noto-cjkfonts-ipafont
  2. 更改 LibreOffice 字体设置
  • 转到“工具” → “选项” → “LibreOffice” → “字体”
  • 将默认字体设置为 Noto Sans CJK JP

防止 CUI 环境中的乱码

1. SSH 会话显示乱码字符

解决方案:

  1. 检查远程服务器的区域设置
    locale
    
  1. 如果未设置为 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) 显示乱码日文

解决方案:

  1. 配置 WSL 使用 ja_JP.UTF-8
    echo 'export LANG=ja_JP.UTF-8' >> ~/.bashrc
    echo 'export LC_ALL=ja_JP.UTF-8' >> ~/.bashrc
    source ~/.bashrc
    
  1. 将 Windows Terminal 字体设置为 Noto Sans Mono CJK JP

2. Docker 容器内部的乱码日文

解决方案:

  1. 进入容器并检查区域设置
    docker exec -it container_name bash
    locale
    
  1. 如果缺少,请添加日文区域设置
    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. 乱码的主要原因

  • 区域设置配置错误:如果系统区域设置为 CPOSIX,日文无法正确显示
  • 未安装字体:没有日文字体,GUI 应用和终端无法正确渲染日文字符
  • 编码不匹配:打开以不同编码(例如 Shift_JIS)保存的文件会导致乱码
  • 终端/编辑器设置不当:如果编码未设置为 UTF-8,日文可能无法正确显示

2. 防止乱码的解决方案

ItemSolution
Locale configurationCheck with locale and run update-locale LANG=ja_JP.UTF-8
Font installationsudo apt install -y fonts-noto-cjk fonts-ipafont
Check file encodingUse file -i or nkf --guess
Convert encodingiconv -f SHIFT_JIS -t UTF-8 filename -o newfile
Terminal configurationSet LESSCHARSET=utf-8 and change fonts to Noto Sans Mono CJK JP
Fix GUI garbled textSet fonts to Noto Sans CJK JP and use gnome-tweaks if needed
Fix WSL garbled textSet ja_JP.UTF-8 and configure fonts
Fix Docker garbled textRun 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 容器中,都可以消除几乎所有的乱码问题。

年収訴求