0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

バッチファイルで日本語が文字化けする

Last updated at Posted at 2025-06-06

背景

バッチファイルでechoやディレクトリに日本語を使って処理させたとき、文字化けしてしまう

開発環境

  • Windows11 Pro
    • Version:23H2
    • OS Build:22631.5189

検証

おそらく文字コードが原因だろうと踏んで、文字コード設定を調べてみることにしました。
コマンドプロンプト上でchcpコマンドを実行したところ、コードページ番号は「932」と表示されました。

image.png

対応表によるとコマンドプロンプトでデフォルトで設定されている文字コードは「Shift_JIS」になります。(日本語版のOSであれば大体はこの文字コードに設定されていると思います)
 ※各コードページと文字コードの対応表は こちら に記載されています。

アプリケーション側で設定した文字コードがコマンドプロンプトの文字コード設定に影響するのかを調べてみます。
メモ帳で「chcp_chk.bat」を作成し、メモ帳側の文字コードを「UTF-8」で保存して実行してみます。

chcp_chk.bat
@echo off
chcp
pause

実行結果は、「現在のコードページ:932」と表示されました。

image.png

同様に「chcp_chk (2).bat」を作成し、「ANSI」で保存。実行しても同じ結果となりました。
当たり前といえば当たり前ですが、あくまでアプリケーション側はアプリケーション側の設定であってコマンドプロンプト側の文字コード設定には影響しないということになります。

余談

「ANSI」でエンコードしたバッチファイルはchcpコマンドで文字コードを指定しなくても文字化けせずに正常に表示されます。
試しに先ほどの2つのバッチファイルに echo テスト を追加して実行してみます。

image.png

このようになぜ「ANSI」だと正常に表示されるのか。これについては「Shift_JIS」は ANSIコード を基に作られているからです。
この2つの違いについて、ぶっちゃけてしまうと「国際規格」か「日本規格」かの違いだけです。
「JISコード」には半角コードと共存する上で問題があったため、ANSIコードを「Shift_JIS」として採用したようです。

原因

コマンドプロンプト側で設定されている文字コードとアプリケーション側で設定している文字コードの違いにより現象が起きている。

対策

  • chcpコマンドで文字コードを指定する
    この対策が無理に環境を変えずに実施できるかと思います。
    文字コードを指定する場合はchcpの後ろにコードページ識別子を指定すればいいです。
    例)chcp 65001 (文字コード「UFT-8」の場合)
  • 「ANSI」でエンコードする
    荒業ですが「Shift_JIS」を使用している以上は不都合はないかと思ってます。
  • 日本語を使用しない
    これも極端な対策ですが、「ASCII」や「Unicode」「UFT-8」など互換性のある国際規格を使用するのであればこちらも不都合はないと思います。
    ですが、環境によっては可読性が落ちる場合もあるのでプロジェクトで開発を行なっている場合は注意が必要です。

まとめ

文字コードの違いにより文字化けが起こる現象は、バッチファイルに限らず電子データを取り扱う上で共通して言えることですので、エンコーディング設定も気にかけてコーディングしましょう。(自戒の念も込めて)
どの文字コードを指定するかについては極論なんでもいいと思ってます。エンコードする文字コードが統一されていればいいので。
初歩的な内容ではありますが、なんとなく知ってるだけに見落としてしまう原因だなと改めて思いました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?