Ubuntu 文字顯示錯誤完全對策指南|從原因、解決方法到設定更改徹底解析

目次

1. 前言

在使用 Ubuntu 時,某些情境下可能會發生文字顯示異常(亂碼)。例如,在終端機輸出、日本語文件名稱顯示、瀏覽器查看日文網頁時,可能會因環境不同而出現各種問題。特別是在使用預設設定時,日文可能無法正確顯示,因此需要適當的設定。

本文章將詳細說明 Ubuntu 中發生文字顯示錯誤的原因,並提供具體的解決方法。適合的讀者包括以下類型:

  • Ubuntu 初學者,尚未進行日文顯示設定的人
  • 想了解亂碼產生的原因,並尋找根本解決方案的人
  • 在終端機或圖形介面(GUI)環境中遇到亂碼問題,想要找到對應解決方法的人

那麼,首先讓我們來看看 Ubuntu 中發生亂碼的主要原因。

2. 文字顯示異常的主要原因

區域語系(Locale)設定不完整

Ubuntu 的區域語系(Locale)是決定系統語言、日期格式等環境設定的重要參數。如果這些設定不正確,可能會導致日文無法正常顯示或出現亂碼。

例如,執行 locale 指令時,如果輸出結果如下所示,顯示「C」或「POSIX」,則表示區域語系設定不完整或未正確設置。

$ locale
LANG=C
LC_ALL=

理想的情況下,日文環境應該設定為 LANG=ja_JP.UTF-8

字型(Font)未安裝或不足

Ubuntu 的預設安裝可能不包含日文字型,因此在某些情境下,日文可能無法正確顯示,而是變成方塊(□)或無意義的符號。

特別是在以下情境中,可能會發現字型不足的問題:

  • GUI 應用程式(例如:系統設定、瀏覽器等)的選單或按鈕出現亂碼
  • 使用文字編輯器打開日文文件時發生亂碼

文字編碼(Character Encoding)不一致

Ubuntu 主要使用 UTF-8 作為標準編碼。然而,如果打開來自 Windows 環境的 Shift_JISEUC-JP 編碼的檔案,可能會發生亂碼。

例如,在 Windows 環境下建立的文件,在 Ubuntu 中打開時,可能會遇到以下問題:

  • 使用文字編輯器開啟時,顯示為無法識別的符號
  • 在終端機執行 cat 指令時,文字顯示異常

終端機或編輯器設定錯誤

如果終端機或文字編輯器的編碼設定不正確,即使文件本身使用 UTF-8,仍可能出現亂碼。

  • 終端機的編碼設定非 UTF-8
  • Vim 或 VSCode 等編輯器無法正確自動辨識文件的編碼
  • 使用 lesscat 查看文件時,日文部分顯示為「?」或「◇」
侍エンジニア塾

3. 檢查與修正區域語系(Locale)設定

如何確認區域語系設定

首先,可以使用以下指令來確認目前的區域語系設定:

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 支援的日文字型包括以下幾種:

字型名稱特點
Noto Sans CJK JPGoogle 提供的高品質日文字型(推薦預設使用)
Takao 字型舊版 Ubuntu 預設字型(提供細體與粗體)
IPA 字型由資訊處理推進機構(IPA)提供的高品質字型
VL Gothic可讀性高,適合終端機使用

如何安裝日文字型

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

設定字型的方法

1. 在 GUI 應用程式中設定字型

  1. 打開「設定」應用程式
  2. 進入「字型」設定頁面
  3. 將「標準字型」、「文件字型」、「等寬字型」更改為適當的日文字型
  4. 登出並重新登入,使設定生效

2. 在終端機中設定字型

  1. 打開終端機
  2. 在終端機選單中,選擇「設定」→「編輯設定檔」
  3. 進入「文字」設定頁面,勾選「使用自訂字型」
  4. 選擇適合的字型(如 Noto Sans Mono CJK JP)
  5. 儲存設定後,重新啟動終端機

確認字型設定是否生效

可以使用以下方法來確認字型是否正確安裝並生效:

  1. 使用 fc-list 指令檢查已安裝的字型
fc-list | grep "Noto"
  1. 在終端機中測試日文顯示
echo "こんにちは、Ubuntuの文字化け対策"
  1. 在 GUI 應用程式(如 Firefox、LibreOffice)中查看日文顯示是否正常

5. 檢查與轉換文字編碼

什麼是文字編碼?

文字編碼是將文字儲存為數位資料的規則。常見的文字編碼包括以下幾種:

文字編碼特點主要用途
UTF-8支援多語言,Linux 系統標準編碼Ubuntu、網頁開發
Shift_JIS日文專用,在 Windows 環境中較常見Windows 應用程式、舊系統
EUC-JP過去在 UNIX 系統中使用舊版 Linux 系統
ISO-2022-JP常用於電子郵件與特定環境電子郵件通訊

Ubuntu 預設使用 UTF-8,如果開啟使用其他編碼(如 Shift_JISEUC-JP)儲存的檔案,可能會發生亂碼。

如何檢查檔案的文字編碼

1. 使用 file 指令檢查

可以使用以下指令來檢查文字編碼:

file -i sample.txt

範例輸出結果:

sample.txt: text/plain; charset=iso-8859-1

2. 使用 nkf 指令檢查

安裝 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 預設編輯器)
  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(預設終端機)

  1. 打開終端機
  2. 進入「設定」
  3. 選擇「編輯個人資料」
  4. 進入「文字」選項卡,勾選「使用自訂字型」
  5. 選擇以下其中一種字型:
    • Noto Sans Mono CJK JP
    • VL Gothic
    • Takao Gothic
  6. 儲存設定後,重新啟動終端機

文字編輯器的文字編碼設定

1. 確認與修改 Vim 的文字編碼

可以使用以下指令檢查目前的 Vim 設定:

:set encoding?
:set fileencoding?

正常的輸出應該為:

encoding=utf-8
fileencoding=utf-8

如果編碼不是 UTF-8,請修改 Vim 的設定檔(~/.vimrc),加入以下內容:

set encoding=utf-8
set fileencodings=utf-8,sjis,euc-jp
set fileformats=unix,dos,mac

2. 修改 Nano 編輯器的文字編碼

要更改 Nano 的預設文字編碼,可以編輯設定檔(~/.nanorc),加入以下內容:

set encoding "utf-8"

3. 在 VSCode(Visual Studio Code)中設定文字編碼

  1. 打開 VSCode
  2. 點擊畫面右下角的「編碼」
  3. 選擇 UTF-8
  4. 如果需要,選擇「重新開啟以使用新編碼」或「使用新編碼儲存」

如果要將 UTF-8 設為預設編碼,請在 VSCode 的設定檔(settings.json)加入以下內容:

"files.encoding": "utf8"

7. 依照不同情境進行對應的解決方法

解決 GUI 應用程式中的亂碼問題

1. Firefox 或 Chrome 瀏覽器中的日文顯示異常

解決方案:

  1. 確保已安裝所需的日文字型
sudo apt install -y fonts-noto-cjk fonts-ipafont
  1. 檢查瀏覽器的字型設定
  • Firefox:
    1. 在網址列輸入 about:preferences 並按下 Enter
    2. 找到「字型與配色」→ 點擊「進階」
    3. 將「比例字型」與「等寬字型」更改為 Noto Sans CJK JP
  • Chrome:
    1. 在網址列輸入 chrome://settings/fonts
    2. 將「標準字型」與「等寬字型」設為 Noto Sans CJK JP

2. LibreOffice 文件中的日文亂碼

解決方案:

  1. 安裝 fonts-noto-cjkfonts-ipafont 字型
  2. 打開 LibreOffice,進入「工具」→「選項」→「LibreOffice」→「字型」
  3. 將標準字型設定為 Noto Sans CJK JP

解決 CUI 環境中的亂碼問題

1. SSH 連線時的亂碼

解決方案:

  1. 在遠端伺服器上執行 locale,確認語系是否為 ja_JP.UTF-8
locale
  1. 如果語系不正確,請執行以下指令來設定:
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 容器,檢查區域語系設定
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. 已經設定區域語系(Locale),但亂碼問題仍未解決。

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: 可能是因為您的系統沒有安裝日文輸入法(IM)。請安裝 Fcitx Mozc 輸入法:

sudo apt update
sudo apt install -y fcitx-mozc
im-config -n fcitx

安裝後請重新登入系統,並在「輸入法設定」中選擇 Fcitx 作為預設輸入法。

Q4. 在 WSL(Windows Subsystem for Linux)中日文顯示亂碼。

A: WSL 預設可能沒有設定正確的區域語系。請執行以下指令:

echo 'export LANG=ja_JP.UTF-8' >> ~/.bashrc
echo 'export LC_ALL=ja_JP.UTF-8' >> ~/.bashrc
source ~/.bashrc

Q5. Docker 容器內的日文顯示亂碼。

A: Docker 容器通常使用最小化的系統映像,可能沒有安裝日文區域語系。請進入容器並安裝所需語系:

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: 這可能是因為缺少必要的日文字型。請安裝 fonts-noto-cjk 並重新啟動系統:

sudo apt install -y fonts-noto-cjk fonts-ipafont

9. 總結

本文章詳細解釋了Ubuntu 中可能發生的日文顯示亂碼問題,並提供了對應的解決方法。亂碼問題通常由以下幾個因素引起:

1. 亂碼的主要原因

  • 區域語系(Locale)設定錯誤:如果 Ubuntu 的預設語系為 CPOSIX,日文將無法正常顯示
  • 字型(Font)未安裝:如果系統缺少日文字型,在 GUI 或終端機中可能會出現亂碼
  • 文字編碼(Character Encoding)不一致:開啟非 UTF-8 編碼的檔案可能導致亂碼
  • 終端機與編輯器的設定錯誤:若未設定為 UTF-8,日文將無法正確顯示

2. 解決亂碼問題的方法

問題類型解決方法
區域語系(Locale)設定使用 locale 檢查設定,並執行 update-locale LANG=ja_JP.UTF-8
字型(Font)安裝執行 sudo apt install -y fonts-noto-cjk fonts-ipafont
檔案的文字編碼使用 file -inkf --guess 檢查編碼
轉換文字編碼使用 iconvnkf 指令轉換為 UTF-8
終端機設定設定 LESSCHARSET=utf-8,並將字型改為 Noto Sans Mono CJK JP
GUI 亂碼在系統設定中將字型更改為 Noto Sans CJK JP
WSL 亂碼設定 LANG=ja_JP.UTF-8,並修改終端機字型
Docker 亂碼執行 locale-gen ja_JP.UTF-8 並設定正確的語系

3. 額外的預防措施

  • 定期更新系統:過時的系統套件可能影響日文顯示
sudo apt update && sudo apt upgrade -y
  • 確保設定變更永久生效:將環境變數新增至 ~/.bashrc~/.profile
  • 備份設定檔:在修改 /etc/default/locale 等系統設定檔時,先行備份

最終結論

在 Ubuntu 中,文字顯示異常(亂碼)通常由區域語系、字型、文字編碼或終端機設定錯誤導致。本文章提供的解決方案能有效解決大多數情境下的亂碼問題。如果遇到新問題,可以使用 localefile -ifc-list 等指令來進一步調查原因。