【Windows】バッチファイルが文字化けする原因とその対処法

Windows

本記事では、Windowsにおいて、バッチファイルが文字化けする原因とその対処法を解説します。

なぜ文字化けするのか考えてみる

はじめに、文字化けはどうやって発生するのかを確認しておきます。

そもそも「文字コード」って?

文字コードは、コンピュータが処理できるように番号や記号で文字を表したものです。

文字コードの種類によって、その番号や記号は異なります。そのため、UTF-8で書いた内容をSJISで開こうとすると、SJISでは解釈できず文字化けするということです。

「最初から統一しとけよ!」と思ってしまいますよね。ただ、コンピュータは英語圏で開発されたため、アルファベット以外の文字を使うことは想定していませんでした。コンピュータが全世界に広まるにつれて、各国の文字を扱えるよう文字コードも増えていきました。

また、処理のしやすさだったり、このシステムでは昔からこの文字コードだから!みたいな人為的な要因で統一されていないのが現状です。

コマンドプロンプトのデフォルト文字コードは「Shift_JIS」

バッチファイルとは、コマンドプロンプトをまとめたテキストファイルのことです。バッチファイルを実行するということは、コマンドプロンプト上でコマンドを実行しているのと同じことです。

で、このコマンドプロンプトのデフォルトの文字コードは「Shtft_JIS」です。

Windowsのメモ帳のデフォルト文字コードは「UTF-8」

しかし、Windowsのメモ帳の文字コードのデフォルトは、「UTF-8」です。以前はShift_JISだったのですが、2019年のアップデートでUTF-8に変わりました。

つまり、Windowsのメモ帳でバッチファイルを作成すると、文字化けが発生するといえます。

まとめ

バッチファイル・コマンドプロンプトの文字コードが異なると、文字化けする

文字化けの対処法

ここからは、文字化けした際の対処法を紹介します。

文字コード設定の前提

文字化けは、バッチファイルとコマンドプロンプトの文字コードを合わせることで解消します。文字コードが統一されてさえいれば、どちらに合わせてもOKです。

ただし、厳密に言うと、Windows PCの文字コードは、システムロケール(そのPC自体の言語設定)が日本語の場合Shift-JISです。そのため、バッチファイルをUTF-8にすると動かないシステムもある可能性があります。なので、ここでは「Shift_JIS」に合わせたいと思います。

Windowsのメモ帳でバッチファイルを作る場合

Windowsのメモ帳でバッチファイルを作る場合、先述のとおりデフォルトの文字コードは「UTF-8」となっています。そのため、「Shift-JIS」に変更する必要があります。

ファイル上で右クリックし「その他のオプションを表示」を押し、「編集」を押します。

メモ帳を開いたら、「名前を付けて保存」を開きます。

「ANSI」を選択して保存します。ファイル名がそのままの場合、上書きするか聞かれるので上書きします。なお、「ANSI」というのはShift_JISとほぼ同等のもので、日本においてはShift_JIS(CP932)のことをさします。

サクラエディタなら文字コードを簡単に変更可能

サクラエディタは、無料のテキストエディタです。サクラエディタを使うと文字コードを簡単に変更できます。

バッチファイルの場合、コメント部分やコマンド部分などが色分けされるので分かりやすいのも魅力です。他にもAtomや秀丸エディタなど有名なものがいくつかありますので、好みのものを是非使ってみてください。Windowsのメモ帳には戻れなくなりますよ・・・!

サクラエディタ インストールページ

CHCPコマンドで文字コードを指定

本来、バッチファイルはコマンドプロンプトの文字コードで実行されます。しかし、「CHCP」コマンドをバッチファイル内に記載することで、指定した文字コードで実行することが可能です。

文字コード指定する番号
shift_jis932
utf-161200
us-ascii20127
euc-jp51932
utf-765000
utf-865001
chcp 65001
echo これはUTF-8です

pause

CHCPコマンドより前に処理やコメントを書いても実行されません。バッチファイルの一番上に記載するようにしてください。

ポイント

CHCPコマンドはファイルの先頭に書くこと!

コピペするときは文字コード混在に注意!

バッチファイルを作る際、別のファイルだったりネット記事などからコピペすることありますよね。そのような場合にも文字コードに注意が必要です。

以下は、UTF-8で作られたバッチファイルに、SJISの文字列をコピペした例です。これを実行するとどうなるでしょうか?

実行結果は以下です。

'�にちは' is not recognized as an internal or external command,
operable program or batch file.

(日本語の場合)内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません

SJISの部分で文字化けが発生しています。おそらく、バッチファイル保存時に文字コードの変換や統一化が行われていないものと思われます。テキストエディタによっては「文字コードが混在してますよ!」という警告を出してくれるものもありますが、そうでない場合もあります。

文字コード混在の解決方法

文字コード混在の解決方法としては、nfkコマンドを使用する方法があるようです。

参考:https://happy-nap.hatenablog.com/entry/2022/09/26/202008

上記を使わない手軽な方法は・・・すみません。いい案が思い浮かびません。。あったら教えてください!

Webサイトからコピペしてくる場合はほとんどがUTF-8なので、その場合はバッチファイルをUTF-8にして先頭にCHCPコマンドをつけるか、コマンドプロンプトの文字コードをUTF-8にすると良いです。

文字化けを直してくれるサイトまとめのページを見つけたので、こちらも載せておきます。

文字化けを変換!直して解読できる無料サイト・ツール10選
文字化けを変換し、直して読めるように解読してくれる無料のサイトやツールを紹介します。文字化けした文章をコピペするだけなので簡単に解決してくれるものばかりです。

まとめ

今回は、Windowsにおいて、バッチファイルが文字化けする原因とその対処法を解説しました。

バッチファイルは作業効率化・自動化に大変役に立つ存在なので、うまく使いこなしていきたいものですね。

バッチファイルを使って起動中のプログラムを一括で閉じる方法や、ワンクリックでシャットダウンするようにできる方法なども紹介しています。あわせて見ていただけると嬉しいです。

[改訂新版]Windowsコマンドプロンプトポケットリファレンス

[改訂新版]Windowsコマンドプロンプトポケットリファレンス

山近 慶一
4,700円(07/25 16:20時点)
Amazonの情報を掲載しています

コメント

タイトルとURLをコピーしました