文字コード・文字化け対策

にメンテナンス済み

コマンドプロンプトで日本語を扱っていると、文字化けに遭遇することがあります。特に UTF-8 のファイルを扱う場合や、他のプログラムの出力を処理する場合に頻発します。

この記事では、文字化けの原因とその対策について解説します。

文字化けが起きる原因

文字化けは、テキストを書いた側と読む側で異なる文字コードを使用しているために発生します。

Windows の日本語環境では、以下の文字コードが混在しています。

文字コードコードページ説明
Shift_JIS932Windows の日本語環境の既定値
UTF-865001現在のWeb・開発環境の主流
UTF-16-Windows の内部処理で使用

コマンドプロンプトの既定のコードページは 932(Shift_JIS) ですが、最近のテキストエディタやプログラムは UTF-8 を既定値として使用することが多く、この不一致が文字化けの主な原因です。

現在のコードページを確認する

chcp
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>chcp
現在のコード ページ: 932
C:\users\user>

コードページを変更する(chcp コマンド)

chcp コマンドでコードページを変更できます。

UTF-8 に変更

chcp 65001
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>chcp 65001
現在のコード ページ: 65001
C:\users\user>
おすすめ書籍※ 広告を含む場合があります
中小企業経営者のためのRPA入門 RPA導入を成功させる方法

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超入門

60分でわかる! AIエージェント 超入門

コマンドラインの黒い画面が怖いんです。

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

Shift_JIS に戻す

chcp 932
chcp の効果範囲

chcp で変更したコードページは、そのコマンドプロンプトウィンドウ内でのみ有効です。新しいウィンドウを開くと既定のコードページに戻ります。

バッチファイルの文字化け対策

対策 1: バッチファイルの保存時の文字コードに注意

バッチファイルは、コマンドプロンプトのコードページと同じ文字コードで保存する必要があります。

保存形式動作
ANSI(Shift_JIS)既定のコードページ 932 で正常動作
UTF-8(BOM なし)chcp 65001 と組み合わせて使用
UTF-8(BOM 付き)先頭にゴミ文字が表示される場合あり
UTF-8 BOM 付きの注意

バッチファイルを UTF-8 BOM 付きで保存すると、先頭に BOM(Byte Order Mark)が含まれるため、@echo off が正しく認識されない場合があります。UTF-8 で保存する際は BOM なし を選択してください。

対策 2: バッチファイル内で chcp を変更

UTF-8 のファイルを処理するバッチファイルでは、先頭でコードページを変更します。

@echo off
setlocal

rem 現在のコードページを控えてからUTF-8に変更
for /f "tokens=2 delims=:" %%a in ('chcp') do set ORIG_CP=%%a
chcp 65001 >nul

rem UTF-8のファイルを処理
type "utf8_data.txt"

rem コードページを元に戻す
chcp %ORIG_CP% >nul

endlocal

chcp の出力は表示言語によって文言が変わりますが、コロン(:)の後ろにコードページ番号が表示される点は共通なので、上記のように delims=: で取り出せます。元のコードページを控えておくと、932 を直書きせずに確実に復元できます。

チェック

chcp 65001 >nul のように >nul を付けることで、「現在のコード ページ: 65001」というメッセージの表示を抑制できます。

UTF-8 のバッチファイルは古い環境で不安定です

日本語を含む UTF-8 のバッチファイルを chcp 65001 で実行すると、Windows 10 の古いバージョンなどでラベルや goto が正しく解釈されないことがあります。配布するバッチファイルや動作環境が不明な場合は、次の対策 3 の Shift_JIS 保存が安全です。

対策 3: Shift_JIS で保存する

バッチファイル自体に日本語を含む場合、最も確実な方法はバッチファイルを Shift_JIS(ANSI) で保存することです。

Visual Studio Code を使用している場合は、右下のエンコーディング表示をクリックし、「エンコード付きで保存」から「Japanese (Shift JIS)」を選択します。

システム全体で UTF-8 を既定にする設定

Windows 10 バージョン 1803 以降(Windows 11 を含む)では、地域の設定から OS 全体の既定を UTF-8 にできます。

  1. 「設定」→「時刻と言語」→「言語と地域」→「管理用の言語の設定」を開く(intl.cpl を実行しても開けます)
  2. 「管理」タブの「システム ロケールの変更」を選択する
  3. 「ベータ: ワールド ワイド言語サポートで Unicode UTF-8 を使用」にチェックを入れて再起動する
この設定は慎重に

この設定を有効にすると、Shift_JIS を前提とした古いアプリケーションやバッチファイルが文字化けする可能性があります。影響範囲が大きいため、まずは chcp や保存形式の調整で解決できないかを検討してください。

よくある文字化けのケースと対策

ケース 1: type コマンドで UTF-8 ファイルが文字化けする

chcp 65001 >nul
type "utf8_file.txt"
chcp 932 >nul

ケース 2: findstr で日本語が検索できない

findstr はシステムのコードページを使用するため、UTF-8 のファイルに対する日本語検索は正しく動作しない場合があります。

chcp 65001 >nul
findstr "キーワード" "utf8_file.txt"
chcp 932 >nul

PowerShell を使う場合は、エンコーディングを明示すると確実です。

powershell -NoProfile -Command "Select-String -Path utf8_file.txt -Pattern 'キーワード' -Encoding utf8"
findstr の UTF-8 対応の限界

findstr の UTF-8 対応は完全ではなく、正規表現を使用した日本語のパターン検索では正しく動作しない場合があります。信頼性の高い UTF-8 テキスト検索が必要な場合は、PowerShell の Select-String コマンドレットの使用を検討してください。

ケース 3: 他のプログラムの出力が文字化けする

Python や Node.js など、UTF-8 を既定値とするプログラムの出力が文字化けする場合があります。

chcp 65001 >nul
python script.py
chcp 932 >nul

あるいは、環境変数でプログラム側の出力エンコーディングを設定する方法もあります。

set PYTHONIOENCODING=utf-8
python script.py

この設定は Python が UTF-8 で出力するようにするものです。パイプやファイルへの出力では有効ですが、コンソールのコードページが 932 のままだと画面上では文字化けします。

ケース 4: リダイレクトで作ったファイルが文字化けする

Windows PowerShell 5.1 では、リダイレクト(>)で保存したファイルが UTF-16 になります。そのファイルを他のツールで開くと文字化けしたり、1 文字ごとに空白が入って見えたりします。

PowerShell で保存する場合は、Out-File -Encoding utf8 や Set-Content -Encoding utf8 のようにエンコーディングを明示してください。なお、Windows PowerShell 5.1 の -Encoding utf8 は BOM 付きで保存されます。

ケース 5: バッチファイルの echo が文字化けする

バッチファイル自体の保存文字コードと、コマンドプロンプトのコードページが不一致の場合に発生します。

バッチファイルの保存形式をコマンドプロンプトのコードページに合わせてください。

フォントの設定

一部の文字が表示されない場合、コマンドプロンプトのフォント設定が原因の可能性があります。

  1. コマンドプロンプトのタイトルバーを右クリック
  2. 「プロパティ」を選択
  3. 「フォント」タブで「MS ゴシック」や「Consolas」を選択
Windows Terminal の推奨

Windows Terminal(Windows 11 22H2 以降では既定のターミナル)は、UTF-8 の表示に優れています。文字化けが頻発する場合は、Windows Terminal の使用を検討してください。

まとめ

問題対策
UTF-8 ファイルの表示が化けるchcp 65001 でコードページを変更
バッチファイルの日本語が化けるShift_JIS で保存する
他プログラムの出力が化けるchcp 65001 またはプログラム側設定
findstr で日本語検索できないコードページ変更または PowerShell 利用
BOM 付き UTF-8 の問題BOM なし UTF-8 で保存

文字化けの多くは、書く側と読む側の文字コードを一致させることで解決できます。

関連記事

練習問題

練習問題

コマンドプロンプトのコードページを UTF-8 に変更するコマンドはどれですか?

回答がサーバーに送信されることはありません
#コマンドプロンプト #バッチファイル #文字化け #UTF-8 #文字コード