メンテナンス注記(2026年9月1日):本ページでは、現行の WSL と Windows Terminal に対応した段階的なトラブルシューティングを先に示します。2019年の本文は、行末空白だけを正規化して末尾に保存しています。locale の手動編集、旧 Linux フォントパッケージ、第三者サイトへのリンクは歴史的記録であり、現行手順の根拠ではありません。
中国語の「四角」と文字化けは似て見えても、通常は原因が異なります。
□□□や中空の四角は、選択中のターミナルフォントに必要なグリフがない場合が多い䏿–‡のような文字列は、UTF-8 のバイト列を別のエンコーディングとして解釈した場合が多い�は、現在のデコーダーでは解釈できないバイトが入力に含まれる場合が多い
まず、Windows Terminal の描画、WSL の locale、個別ファイルやアプリのエンコーディングのどこで問題が起きているかを特定します。フォント、locale、アプリ設定を同時に変えないでください。直ったとしても本当の原因が分からなくなります。
Table of Contents
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 charmap が UTF-8 なら、Windows Terminal のフォントを先に確認します。Python がエンコーディングエラーを出す、または charmap が UTF-8 でなければ locale を調べます。1つのアプリやファイルだけに問題がある場合は第5節へ進みます。
2. 四角を直す:Windows Terminal プロファイルのフォントを確認する
WSL シェルは文字と制御シーケンスを出力し、Windows Terminal がターミナルのセルを画面に描画します。Microsoft の文書では、フォントは各プロファイルの Appearance 設定です。そのため、WSL 内へフォントをインストールしても、Windows Terminal が使うフォントは自動では変わりません。
Windows Terminalで以下を行います。
Ctrl+,で Settings を開く- 実際に使っている Ubuntu/WSL プロファイルを選ぶ
- Appearance を開く
- Font face を確認し、簡体字中国語のグリフを含むことが確認できたインストール済みフォントを選ぶ
- 新しいタブを開き、前節の中国語テストを繰り返す
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-8、en_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 charmapがUTF-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、関連する公式文書だけを使用し、旧リンクはアーカイブにのみ保存 |
公式参考資料
- Microsoft WSL トラブルシューティング:バージョン情報、更新、表示言語
- Microsoft WSL基本コマンド
- Microsoft Windows Terminal概要:UnicodeとUTF-8対応
- Microsoft Windows Terminal プロファイルの Appearance とフォント設定
- Microsoft Windows Terminal のインストールと Settings UI
- Microsoft Windows フォント管理
- Microsoft Typography:Microsoft YaHei
- Microsoft Windows Terminal のカスタムプロンプト:不足グリフの診断
- Ubuntu `locale` マニュアル
- Ubuntu `locale-gen` マニュアル
- Ubuntu `update-locale` マニュアル
- Ubuntu `fonts-noto-cjk` パッケージ
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)
