バッチファイルを UTF-8 で書く

2018/04/16

#Windows10 コマンドライン

現在の Windows では、コードページ指定をすればコマンドラインで UTF-8 を書くことができます。
そこで、バッチファイルを UTF-8 で書く際に気をつけるべき点をご紹介します。

UTF-8に変更したコマンドプロンプト
UTF-8に変更したコマンドプロンプト

コードページを変更する

コードページは、特定の文字コードを表す Windows 特有の番号で、SJISは 932、UTF-8 は 65001 です。
コードページを変更する為、バッチファイルの先頭で chcpコマンドを指定します。

@echo off
chcp 65001

改行コード

バッチファイルを UTF-8 で保存するとき、改行コードを LF (Unix形式)にしてしまいたくなりますが、これだと上手く動作しない場合があります。
改行コードは必ず、CR+LF (Windows形式)で保存しましょう。

対応フォントを指定

文字化けを防ぐ為に、コマンドプロンプトのプロパティ(または既定値)の「フォント」タブで、UTF-8 の表示に対応した等幅フォントを指定します。

「MSゴシック」や「MyricaM M」が対応しているようです。なお、残念ながら Microsoft 製の視認性が高い等幅フォント Consolas は対応していません。

表示できない文字もある

絵文字や外国語など、日本語の文字コードには無い文字は、上手く表示できないようです。指定したフォントには該当文字が存在しない為だろうと思います。

しかしコードページ指定が全く無意味なわけではなく、コードページに従って内部処理は正常に行われています。その為、Unicode の文字列をコマンドでアプリケーションに渡したり、リダイレクトでファイルに書き込むことが出来るようになります。

なお、コードページ 932 のままでも一部の Unicode 文字は表示されますが、ファイルに書き込む等すると文字化けします。

PowerShellの場合

PowerShellではコードページ 932 と 65001 の何れでも、echo コマンドなどをリダイレクトしてファイルに保存すると、UTF-16LE(BOM付き)として出力されます。

また、コマンドプロンプトでは 932 のままだと文字化けするようなケースでも、PowerShell だと上手く動作する場合がありますが、65001 に変更したほうが確実に動作しますので、それについては省略します。

※ 全て2018年04月時点の Windows 10 (64bit) で確認しました。

参考サイト

サイト内を検索

自己紹介

自分の写真
スマートフォン(Android)、IT、PC、プログラミング等の役立つ(かもしれない)情報や気になる話題を書いています。

QooQ