バッチファイルを使用する際に、日本語のコメントなどを付与した際に、以下のように出力結果が文字化けしてしまうことがあります。
「rem」はバッチファイルに説明用などのコメントを付与するコマンドですが、以下のバッチファイルをメモ帳で作って実行すると、文字化けした出力結果になってしまいます。
rem テスト
今回はバッチファイルの文字化け対策と、バッチファイルにおける文字コードの仕組みについて紹介したいと思います。
目次
文字化けが発生する原因
コンピュータの中では、さまざまな文字が、数字に変換されて処理されています。例えば「”A”という文字は、数字では”65”で表しますよ」という対応を事前に決めておきます。この事前に決めた対応表が文字コードであり、例えばAの文字コードは”65”であると言います。
さて、実はこの文字コード、例えば「Shift_JIS」や「UTF-8」など、さまざまな種類があります。そして、この文字コードによって対応表が違います。
よって、例えばある文字コードでAが65だったとしても、他の文字コードでは65は違う文字に割り当てられているかもしれません。
結果、ある文字コードで作成した文章を、違う文字コードで解釈してしまうと、意味不明な文字列ができあがります。これが「文字化け」と呼ばれる現象です。
コマンドプロンプトの文字コードはShift_JIS
バッチファイルを実行した場合、コマンドプロンプトが開いて命令が実行されます。このコマンドプロンプトは、Windowsの言語設定が日本語の場合はデフォルトでは「Shift_JIS」という文字コードであると解釈して処理を行います。
よって、バッチファイルを「Shift_JIS」の文字コードで作成しておかないと、バッチファイル実行時に文字化けを起こします。
ここで注意すべきなのは、バッチファイルを生成する場合、Windowsのメモ帳などを使われる方が多いと思いますが、Windowsのメモ帳の文字コードは、デフォルトでは「UTF-8」という文字コードでテキストを保存します。よって、文字化けのことを気にせずにメモ帳でバッチファイルを作ってしまうと「UTF-8」で作ったバッチファイルが、コマンドプロンプトでの命令の処理時に「Shift_JIS」の文字コードで解釈されてしまい、結果文字化けが発生します。
文字化けの対処法
コマンドプロンプト側が解釈する文字コードを変更する方法と、バッチファイル側の文字コードを変更する方法の双方がありますが、後者の方が簡単に実現できると思います。
方法1: バッチファイルの文字コードを変更
バッチファイルを記述する場合に、メモ帳などの何らかのエディタを使うと思いますが、基本的にはエディタ側で保存する際に文字コードを設定することが可能です。コマンドプロンプト側がShift_JISで解釈するので、バッチファイルを作成する際に文字コードを「Shift_JIS」にしてしまえばOKです。
ここでは、メモ帳を例に紹介します。メモ帳でバッチファイルを作成して保存する際に、文字コードを変更することが可能です。デフォルトでは「UTF-8」になっていることがわかります。
Windowsのメモ帳でバッチファイルを作る場合、先述のとおりデフォルトの文字コードは「UTF-8」となっています。そのため、「Shift-JIS」に変更する必要があります。
ファイル上で右クリックし「その他のオプションを表示」を押し、「編集」を押します。「ANSI」が「Shift-JIS」のことなので、ANSIを選択して保存します。
これを実行すると、以下のように正しく表示されることを確認できました。
方法2: コマンドプロンプトが解釈する文字コードを変更
コマンドプロンプトが解釈する文字コードをShift_JISではなく、例えばUTF-8などに変更することもできます。これを実現するコマンドが「chcp」で、「UTF-8」の文字コードを表す65001と合わせて「chcp 65001」とすることで、以後は「UTF-8」で解釈されます。
chcp 65001
rem テスト
「UTF-8」で作成したバッチファイルに対して、上記のコマンドを利用すると、正常に出力することができます。