とある環境で、いただいたApacheの設定ファイルを配置し、configtestを行うと、以下のエラーが出た。
Invalid command '\xef\xbb\xbf', perhaps misspelled or defined by a module not included in the server configuration
ファイルの文字コードは、UTF8でしたが、"EF BB BF"は「BOM」と呼ばれる、テキストがUnicodeで書かれているか、や、記述形式の識別を行うための符号らしい。
(恥ずかしながら初めて知った。)
■BOM (Byte Order Mark, バイト・オーダー・マーク)
XML用語事典 [BOM (Byte Order Mark)]
UnicodeのUTF-16などの16bit単位の文字エンコーディングスキームでは、8bit単位でデータを配列する際のエンディアンとして、ビッグエンディアンとリトルエンディアンの両方を許している。そのため、どちらのエンディアンで記述されたデータかを確実に判定するための特別なマークとなる符号として、BOM(Byte Order Mark)が用意されている。
またBOMは、あるテキストがUnicodeで記述されているかどうかを自動判定する手段として使用される場合もある。この目的に使用される場合は、エンディアンが存在するUTF-16だけでなく、エンディアンが存在しないUTF-8のテキストに付加される場合もある。
vimで、このBOMを除去する
:set nobomb :w
こんな感じで、BOMを消してから保存します。
これだけ。
nkfでも出来そう
"man nkf"を眺めていると、OPTIONSのところに以下の記述があります。
-w -w8[0] -w16[BL][0] Unicode を出力する。 -w -w80 UTF8 コードを出力する。 (BOM 無し) -w8 UTF8 コードを出力する。 -w16 -w16B0 UTF16 コードを出力する。 (Big Endian / BOM 無し) -w16B UTF16 コードを出力する。 (Big Endian / BOM 有り) -w16L UTF16 コードを出力する。 (Little Endian / BOM 有り) -w16L0 UTF16 コードを出力する。 (Little Endian / BOM 無し)
nkfコマンドで、上記オプションを付けて出力してやれば良さそうです。