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_JIS
或 EUC-JP
編碼的檔案,可能會發生亂碼。
例如,在 Windows 環境下建立的文件,在 Ubuntu 中打開時,可能會遇到以下問題:
- 使用文字編輯器開啟時,顯示為無法識別的符號
- 在終端機執行
cat
指令時,文字顯示異常
終端機或編輯器設定錯誤
如果終端機或文字編輯器的編碼設定不正確,即使文件本身使用 UTF-8
,仍可能出現亂碼。
- 終端機的編碼設定非
UTF-8
- Vim 或 VSCode 等編輯器無法正確自動辨識文件的編碼
- 使用
less
或cat
查看文件時,日文部分顯示為「?」或「◇」
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 JP | Google 提供的高品質日文字型(推薦預設使用) |
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 應用程式中設定字型
- 打開「設定」應用程式
- 進入「字型」設定頁面
- 將「標準字型」、「文件字型」、「等寬字型」更改為適當的日文字型
- 登出並重新登入,使設定生效
2. 在終端機中設定字型
- 打開終端機
- 在終端機選單中,選擇「設定」→「編輯設定檔」
- 進入「文字」設定頁面,勾選「使用自訂字型」
- 選擇適合的字型(如 Noto Sans Mono CJK JP)
- 儲存設定後,重新啟動終端機
確認字型設定是否生效
可以使用以下方法來確認字型是否正確安裝並生效:
- 使用
fc-list
指令檢查已安裝的字型
fc-list | grep "Noto"
- 在終端機中測試日文顯示
echo "こんにちは、Ubuntuの文字化け対策"
- 在 GUI 應用程式(如 Firefox、LibreOffice)中查看日文顯示是否正常
5. 檢查與轉換文字編碼
什麼是文字編碼?
文字編碼是將文字儲存為數位資料的規則。常見的文字編碼包括以下幾種:
文字編碼 | 特點 | 主要用途 |
---|---|---|
UTF-8 | 支援多語言,Linux 系統標準編碼 | Ubuntu、網頁開發 |
Shift_JIS | 日文專用,在 Windows 環境中較常見 | Windows 應用程式、舊系統 |
EUC-JP | 過去在 UNIX 系統中使用 | 舊版 Linux 系統 |
ISO-2022-JP | 常用於電子郵件與特定環境 | 電子郵件通訊 |
Ubuntu 預設使用 UTF-8,如果開啟使用其他編碼(如 Shift_JIS
或 EUC-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 預設編輯器)
- 使用
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(預設終端機)
- 打開終端機
- 進入「設定」
- 選擇「編輯個人資料」
- 進入「文字」選項卡,勾選「使用自訂字型」
- 選擇以下其中一種字型:
- Noto Sans Mono CJK JP
- VL Gothic
- Takao Gothic
- 儲存設定後,重新啟動終端機
文字編輯器的文字編碼設定
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)中設定文字編碼
- 打開 VSCode
- 點擊畫面右下角的「編碼」
- 選擇
UTF-8
- 如果需要,選擇「重新開啟以使用新編碼」或「使用新編碼儲存」
如果要將 UTF-8
設為預設編碼,請在 VSCode 的設定檔(settings.json
)加入以下內容:
"files.encoding": "utf8"
7. 依照不同情境進行對應的解決方法
解決 GUI 應用程式中的亂碼問題
1. Firefox 或 Chrome 瀏覽器中的日文顯示異常
解決方案:
- 確保已安裝所需的日文字型
sudo apt install -y fonts-noto-cjk fonts-ipafont
- 檢查瀏覽器的字型設定
- Firefox:
- 在網址列輸入
about:preferences
並按下 Enter - 找到「字型與配色」→ 點擊「進階」
- 將「比例字型」與「等寬字型」更改為
Noto Sans CJK JP
- 在網址列輸入
- Chrome:
- 在網址列輸入
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
locale
- 如果語系不正確,請執行以下指令來設定:
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-8
echo '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 容器,檢查區域語系設定
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. 已經設定區域語系(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 的預設語系為
C
或POSIX
,日文將無法正常顯示 - 字型(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 -i 或 nkf --guess 檢查編碼 |
轉換文字編碼 | 使用 iconv 或 nkf 指令轉換為 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 中,文字顯示異常(亂碼)通常由區域語系、字型、文字編碼或終端機設定錯誤導致。本文章提供的解決方案能有效解決大多數情境下的亂碼問題。如果遇到新問題,可以使用 locale
、file -i
、fc-list
等指令來進一步調查原因。