WSLの中国語が四角・文字化けになる問題:Windows TerminalフォントとUTF-8 Locale(2026)

メンテナンス注記(2026年9月1日):本ページでは、現行の WSL と Windows Terminal に対応した段階的なトラブルシューティングを先に示します。2019年の本文は、行末空白だけを正規化して末尾に保存しています。locale の手動編集、旧 Linux フォントパッケージ、第三者サイトへのリンクは歴史的記録であり、現行手順の根拠ではありません。

中国語の「四角」と文字化けは似て見えても、通常は原因が異なります。

  • □□□ や中空の四角は、選択中のターミナルフォントに必要なグリフがない場合が多い
  • 中文 のような文字列は、UTF-8 のバイト列を別のエンコーディングとして解釈した場合が多い
  • は、現在のデコーダーでは解釈できないバイトが入力に含まれる場合が多い

まず、Windows Terminal の描画、WSL の locale、個別ファイルやアプリのエンコーディングのどこで問題が起きているかを特定します。フォント、locale、アプリ設定を同時に変えないでください。直ったとしても本当の原因が分からなくなります。

1. WSL・ターミナル・ディストリビューション環境を記録する

PowerShellでWSL状態を記録します。

wsl --version
wsl --status
wsl --list --verbose

古い Windows 組み込み版 WSL では wsl --version が使えない場合があります。Microsoft のトラブルシューティング文書は、その場合に wsl.exe --status を記録するよう案内しています。Windows、Windows Terminal、使用中の Terminal プロファイル、Ubuntu の各バージョンも記録します。まず再現環境を保存し、調査前には更新しないでください。

Ubuntu/WSL内で次を実行します。

printf '中文测试:你好,世界n'
locale
locale charmap
locale -a | sed -n '1,40p'
python3 - <<'PY'
import locale
import sys

print("stdout:", sys.stdout.encoding)
print("preferred:", locale.getpreferredencoding(False))
print("sample:", "中文测试:你好,世界")
PY

最初の行がすでに四角で、locale charmapUTF-8 なら、Windows Terminal のフォントを先に確認します。Python がエンコーディングエラーを出す、または charmap が UTF-8 でなければ locale を調べます。1つのアプリやファイルだけに問題がある場合は第5節へ進みます。

2. 四角を直す:Windows Terminal プロファイルのフォントを確認する

WSL シェルは文字と制御シーケンスを出力し、Windows Terminal がターミナルのセルを画面に描画します。Microsoft の文書では、フォントは各プロファイルの Appearance 設定です。そのため、WSL 内へフォントをインストールしても、Windows Terminal が使うフォントは自動では変わりません。

Windows Terminalで以下を行います。

  1. Ctrl+, で Settings を開く
  2. 実際に使っている Ubuntu/WSL プロファイルを選ぶ
  3. Appearance を開く
  4. Font face を確認し、簡体字中国語のグリフを含むことが確認できたインストール済みフォントを選ぶ
  5. 新しいタブを開き、前節の中国語テストを繰り返す

Microsoft のフォント一覧は Microsoft YaHei を簡体字中国語フォントとして挙げ、Windows 10 と Windows 11 に含まれると説明しています。まず Windows の Settings > Personalization > Fonts で存在を確認します。等幅フォントが必要な環境では、信頼できる CJK 対応の等幅フォントを導入し、文字の収録範囲を検証してから、Terminal プロファイルで正確なファミリー名を選びます。

JSON を編集する場合、次は対象プロファイル内へ置く断片であり、完全な settings.json ではありません。

"font": {
  "face": "Microsoft YaHei",
  "size": 12
}

Microsoft の文書では、font オブジェクトは Windows Terminal 1.10 以降向けで、旧版では従来の fontFace プロパティを使います。元記事当時の旧 Console Host について、レジストリを使うフォント回避策をコピーし続けないでください。サポート対象の Windows 10 22H2 または Windows 11 では、現行の Windows Terminal を優先します。

通常の中国語は正しく、プロンプトのアイコンだけが四角なら、locale の問題ではありません。選択したフォントにプロンプト用のグリフがないためです。プロンプトに合うフォントか、そのアイコンを使わないテーマを選びます。

3. エンコーディングを直す:中国語表示に中国語 locale は必須ではない

中国語表示には、一貫した Unicode/UTF-8 の経路と、必要なグリフを含むフォントが必要ですが、LANG=zh_CN.UTF-8 は必須ではありません。C.UTF-8en_US.UTF-8 などの UTF-8 locale でも中国語を扱えます。中国語 locale を選ぶと、プログラムのメッセージ、日付、並び順など locale に依存する動作も変わります。

locale charmap がすでに UTF-8 なら、四角だけを理由に /etc/default/locale を編集しません。UTF-8 でなければ、まず UI 言語を変えない UTF-8 locale を検討します。

sudo update-locale LANG=C.UTF-8 LANGUAGE

簡体字中国語のプログラムメッセージが本当に必要なら locale を生成し、Ubuntu の検証機能を備えたツールでシステム全体の設定を書き込みます。

sudo apt update
sudo apt install --yes locales
sudo locale-gen zh_CN.UTF-8
sudo update-locale LANG=zh_CN.UTF-8 LANGUAGE=zh_CN:zh

競合を隠すために LC_ALL を永続設定しないでください。各 LC_* カテゴリを上書きします。update-locale は値を検査して locale 設定を更新するため、手動編集でスマートクォートが混入するような誤りを避けられます。

locale の変更は新しい WSL セッションで検証します。実行中の作業を保存した後、PowerShell からすべての WSL インスタンスを停止し、ディストリビューションを開き直せます。

wsl --shutdown

これは実行中のすべての WSL ディストリビューションとプロセスを終了するため、先に作業を保存します。再度開いたら locale charmap と中国語テストを繰り返します。

4. Windows フォントと Linux フォントを混同しない

通常の Windows Terminal タブは Windows フォントを使います。2019年本文の ttf-wqy-microhei は Linux パッケージであり、通常は Windows Terminal のフォント選択を修復しません。

Linux フォントが関係するのは次の場面です。

  • WSLg で動く Linux GUI アプリ
  • WSL 内で PDF、画像、その他の出力を描画する Linux プログラム
  • fontconfig でフォントを明示的に選ぶ Linux 側のレンダラー

この場合はインストール前に fontconfig の候補を確認します。

fc-match 'sans-serif:lang=zh-cn'
fc-list :lang=zh-cn family | sed -n '1,20p'

対象の Ubuntu リリースに適切な CJK フォントがなければ、信頼できないダウンロードではなくディストリビューションのパッケージを使います。

sudo apt update
sudo apt install --yes fontconfig fonts-noto-cjk
fc-cache -f

その後、影響を受けた Linux GUI アプリまたはレンダラーを再起動します。Windows Terminal の四角に対する標準の修復手順にはしません。

5. 1つのファイルやプログラムだけ文字化けするなら、そのエンコーディングを調べる

テスト文字列は正常なのに古いログ、CSV、ソースだけが異常なら、システムフォントと全体の locale はおそらく正常です。原本を保存し、生成元が宣言したエンコーディングを確認します。GBK、GB18030、Big5、UTF-8 を見た目で推測して原本を上書きしないでください。

ファイルを変更せずバイトを調べられます。

python3 - <<'PY'
from pathlib import Path

path = Path("sample.txt")
data = path.read_bytes()
print("first bytes:", data[:32].hex(" "))
print("UTF-8 preview:", data.decode("utf-8"))
PY

UTF-8 のデコードに失敗したら、そのエラー位置は証拠であり、システム全体の locale をすぐ変更する理由ではありません。生成元のプログラム、プロトコル、エクスポート設定を調べます。元のエンコーディングを確認した後、新しいファイルへ変換して比較します。例えば、元ファイルが GB18030 だと確認できた場合だけ次を使います。

iconv -f GB18030 -t UTF-8 legacy.txt > converted-utf8.txt

変換結果、行数、業務上の内容を検証するまで legacy.txt を上書きしません。

6. 最小再現で境界を特定する

結果に応じて次を選びます。

結果可能性の高い境界次の行動
PowerShell と WSL の両方で中国語が四角Windows Terminal のプロファイル/フォント使用中プロファイルの Font face と Windows フォントのインストールを確認
PowerShell は正常、WSL の UTF-8 テストは四角WSL プロファイルがフォントを上書き、または別のターミナルホストを使用そのタブのプロファイルとホストを確認
UTF-8 テストは正常、1ファイルだけ文字化けファイルまたはアプリのエンコーディング原本を保存し、生成元のエンコーディングを確認してからコピーを変換
locale charmap が UTF-8 でないWSL の localeインストール済みの UTF-8 locale を update-locale で設定し、WSL を再起動
通常の中国語は正常、プロンプトのアイコンだけ四角専用グリフ不足テーマに合うフォントへ変更、またはプロンプトを簡素化
Windows Terminal は正常、WSLg アプリは四角Linux の fontconfig/GUI フォントfc-match を確認し、必要ならディストリビューションから CJK フォントを導入

7. 検証とロールバック

変更を1つ行うたび、すぐ再試験します。

printf '中文测试:你好,世界n'
locale charmap
python3 -c 'print("Python 中文测试")'

以下を検証します。

  • 新しい Windows Terminal タブが意図した WSL プロファイルとフォントを使う
  • locale charmapUTF-8 を返す
  • シェル、Python、問題のアプリが同じテスト文字列を表示できる
  • 英語・中国語のファイル名とコピー&ペーストに新しい破損がない
  • WSLg のフォントパッケージは、実際に Linux 側の描画要件がある場合だけ導入した
  • 変更前の Terminal 設定と locale 値を記録し、個別に戻せる

2019年本文から変わった点

2019年の内容2026年の保守方針
/etc/default/locale を直接編集先に charmap を確認し、必要時は入力を検査する update-locale を使用
中国語表示を zh_CN.UTF-8 へ結び付け適切な UTF-8 locale なら中国語を扱え、UI 言語は別の選択だと説明
ttf-wqy-microhei を一般的な修復として導入Windows Terminal のフォントと WSLg/Linux fontconfig のフォントを分離
四角と文字化けを区別しないグリフ不足、誤ったデコード、無効なバイトを個別に特定
2019年の Windows 10 旧ホスト向け歴史背景を保存しつつ、現行の WSL と Windows Terminal 向けに保守
第三者記事だけを参考にするメンテナンス層では Microsoft、Ubuntu、関連する公式文書だけを使用し、旧リンクはアーカイブにのみ保存

公式参考資料

Windows、WSL、Ubuntu、Terminal の既定値は今後も変わります。対象マシンにインストールされたバージョンのヘルプと公式文書を最終基準にしてください。

2019年本文全文(出典アーカイブ・実行禁止)


sudo vim /etc/default/locale

 LANG=zh_CN.UTF-8
 LANGUAGE=”zh_CN:zh”

 sudo apt-get install ttf-wqy-microhei

[https://blog.csdn.net/sethqqq/article/details/77017759](https://blog.csdn.net/sethqqq/article/details/77017759)

Leave a Reply