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

にメンテナンス済み

コマンドプロンプトで日本語を扱っていると、文字化けに遭遇することがあります。特に 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>

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 のファイルを処理するバッチファイルでは、先頭でコードページを変更します。

utf8_processing.cmd
@echo off
setlocal

rem コードページをUTF-8に変更
chcp 65001 >nul

rem UTF-8のファイルを処理
type "utf8_data.txt"
findstr "検索文字列" "utf8_data.txt"

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

endlocal
チェック

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

対策 3: Shift_JIS で保存する

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

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

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

ケース 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
findstr の UTF-8 対応の限界

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

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

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

Python出力の文字化け対策
chcp 65001 >nul
python script.py
chcp 932 >nul

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

Pythonの場合
set PYTHONIOENCODING=utf-8
python script.py

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

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

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

フォントの設定

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

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

Windows 11 に標準搭載されている Windows Terminal は、UTF-8 の表示に優れています。文字化けが頻発する場合は、Windows Terminal の使用を検討してください。

まとめ

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

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

関連記事

練習問題

練習問題

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

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