Gawkで、UTF-8のファイルからBOMを除去する方法 - AWK
Gawkでは、文字コードがUTF-8のファイルを扱う時は、BOM(UNICODE特有の、見えない文字)が入っていてはいけません。でも、Windows XPのメモ帳で、UTF-8のファイルをお手軽に作成すると、BOMが必ず入ります。
そこで、BOMを除去する方法について、調べてみました。
**** BOMが入る例
o Windows XP (SP3)のメモ帳で作成し、文字コード UTF-8で保存した時、1行目の先頭にBOM(16進数表記で、EF BB BF)が入ります。
**** 対策方法
o 漢字のような全角文字を一切使っていない場合は、UTF-8ではなく、普通に(ANSIで)保存すると、正しく動きました。
o 他のテキストエディターを使って、BOMを入れないようにする方法もあります。
+ さくらエディタなど、BOMの有無を選択出来るものを選びます。
o 下のようなプログラムを使って、事前にBOMを取り除いてからAWKプログラムを実行するようにする方法もあります。
**** Gawkを使ってBOMを除去する方法(の例)
o 大量のファイルを変換したい時に、便利です。
o 変換用プログラムを作る時のポイントは、2つあります。
+ AWKプログラムを書く時は、日本語を使わず、半角文字だけで書く事
+ メモ帳でのファイルの保存は、UTF-8ではなく、普通に(ANSIで)保存する事
** NoBom.awk -- BOMを除去するAWKプログラムを作ります。
+ エクスプローラーで.awkが表示されない時は、「ファイルの拡張子を変更可能にする方法」
--------
{
if (FNR == 1) {
sub(/\xef\xbb\xbf/,"");
}
print;
}
--------
o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。
** NoBom.bat -- 実行するバッチファイルを用意します。(例は、Windows用です)
o Gawk on Windows 3.1.7の場合。オプション「 -W ctype=UTF8」を追加します。
+ gawk.exeの部分は、実行したいAWKに置き換えて下さい。
+ このオプションは無くても問題ないみたいですが、念の為追加しました。
--------
if not exist in mkdir in
if not exist out mkdir out
cd in
for %%F in (*.*) do gawk.exe -W ctype=UTF8 -f ..\NoBom.awk "%%F" > ..\out\"%%F"
cd ..
pause
--------
o Gawk for Windows 3.1.6の場合
+ gawk.exeの部分は、実行したいAWKに置き換えて下さい。
--------
if not exist in mkdir in
if not exist out mkdir out
cd in
for %%F in (*.*) do gawk.exe -f ..\NoBom.awk "%%F" > ..\out\"%%F"
cd ..
pause
--------
** 上のバッチファイルを動かします。
+ NoBom.awkと、NoBom.batを、同じ場所に置きます。
+ 最初に一度、NoBom.batを実行します。inフォルダーとoutフォルダーが出来ます。
+ inフォルダーに、UTF-8で作ったAWKプログラムと入力ファイルを入れます。
+ NoBom.batを実行します。黒い画面が出て、最後に止まります。
+ エラーメッセージが出ていない事を確認して、何かキーを押します。
+ 繰り返し使う時は、inフォルダーや outフォルダーの中を、適当に掃除して下さい。
==
関連ページ:
▼AWKの入出力関数とコマンド実行機能(▼ABC順)
▼AWKプログラムを書く(▼ABC順)
▼AWK
▼制作メモ
> getline = ファイル(やパイプ)から1行読み込む
print = ファイルなどに書き出す
printf = 文字列を組み立ててファイルなどに書き出す
+
GawkでUTF-8のファイルを読み込む時の注意点