UTF-8のバッチファイルが文字化けする時の対処3選
グローバル化とクロスプラットフォーム化により、バッチファイルを UTF-8 で運用したい場面も多いと思います。ただ、文字コードを UTF-8 にするだけで動いてくれるほど、素敵な環境だけではありません。
そんな日本語版 Windows の非常に悩ましい問題に立ち向かっていきましょう。
目次
文字化け環境の定義
- バッチファイルの文字コードが UTF-8 形式
- 改行コードは CRLF になっている
- 日本語版 Windows で動かしている
この記事で扱う内容は、上記のような環境です。既にバッチファイルを『UTF-8 形式』にしていることや、『改行コードが CRLF』になっているのが前提です。
以下の記事も参考になると思います。
https://www.javadrive.jp/command/display/index5.html
文字化けトラブルのおさらい
原因は、バッチファイル内に日本語のような全角文字や特殊記号がある場合に起きる問題ですね。
echoが文字化けする現象
@echo off
echo "おはよう"
echo で出力されるはずの “おはよう" が文字化けしてしまっています。
remすらもおかしい現象
@echo off
rem あ
rem あ
コメント用のコマンドである rem ですら、問題が発生してしまっています。
この2つの現象を解決していきます!
あのポケットリファレンスシリーズでコマンドプロンプトの書籍もあるので、要チェックですよ!
3つの対処法
文字コードをバッチ内で指定
バッチファイルの先頭に以下のコマンドを追記しましょう。
chcp 65001
『chcp』コマンドを使用することで、バッチファイルの文字コードを明示して後続の処理を実行させることができます。
コードページ番号 | 文字コード |
---|---|
65001 | UTF-8 |
932 | Shift-JIS |
1200 | UTF-16 |
※他のコードページ番号と文字コードの対応表は、Microsoft 公式のドキュメントにまとめられています。
日本語版 Windows のコマンドプロンプトは Shift-JIS の文字コードを前提として動作させます。なので、多くの場合は、文字コードを UTF-8 に明示すれば正常に動作するようになります。
無事、echo は文字化けが解消されますが、rem の問題はまだ解決されていないかもしれません。同じ現象で悩んでいたら、続けて読み進めてください。
日本語対応フォントに変更
前項で UTF-8 が扱えるようになりましたが、そもそも日本語に対応したフォントでなければ、コマンドプロンプトが正しく出力ことはできません。
①コマンドプロンプトを起動して、左上のアイコンからプロパティを選択します。
②フォントタブから、任意のフォントを設定します。『MS ゴシック』は日本語に対応しているので、わからなければ同じように設定してください。
これでフォントの設定が完了です。
ただ、そもそもデフォルトが『MS ゴシック』になっていると思うので、特に状況が変わらない場合がほとんどかもしれません。まだ UTF-8 によるトラブルが解決できていない場合は、続けて読み進めてください。
remの内容をダブルクォーテーション
@echo off
chcp 65001
rem "あ"
rem "あ"
シンプルな対処です。これで、無事全ての問題が解決されたはずです。
通常、rem は1行をコメントアウトする機能を持ちますが、文字によっては上手く動かないものがあります。例えば、今回のような『あ』や『了』といった文字が行末にある場合です。
そういった事故がおきないように、rem の内容をダブルクォーテーションで括ってしまえば文字コードによるトラブルを避けることができます。
行末は別の半角文字でも良いのですが、rem がコマンドの一種だと考えると、ダブルクォーテーションにしておくのが自然ですよね。
まとめ
- chcp で文字コードを明示する
- 日本語対応フォントに設定する
- rem 内容もダブルクォーテーション
UTF-8 で安定して稼働させられるよう作業コストを払うか、開き直って Shift-JIS で運用するか天秤にかけることになると思います。
チーム開発する場合など、UTF-8 が標準の環境(OS やエディタ)と入り混じることもあると思います。そんな局面で Shift-JIS を選択する理由は薄く、UTF-8 で統一することになり、文字化けトラブルに見舞われた人も多いはずです。
開発者にとって、文字コードに悩まされるのはつくづく不毛だと感じてしまうのですが、これも時代の産物です。向き合っていくのは仕方のないコストですね。
こんなトラブルを迎えるたびに、文字コードの世界平和が実現すれば良いのになぁと思っちゃいますね。
以下は、まさにプログラマーのための文字コードに関する書籍です。入門よりはややレベルが高めですが、手元に置いておきたい書籍ですね。
以上、UTF-8のバッチファイルで文字化けする時の対処3選でした。