UTF-8 ドキュメントの BOM を削除する
先日 UTF-8 で記述したシェルスクリプトが実行できないということがありました。BOM が付いていたことが原因だったのですが、その削除に関するメモを残しておきます。
BOM の確認は UTF-8 の場合、先頭 3 バイトの 0xEF 0xBB 0xBF を確認します。
$ od -t x1 hoge.xml
0000000 ef bb bf 3c 78 6d 6c 20 76 65 72 73 69 6f 6e 3d
...
VIM の場合は、
にて、BOM を消して保存します。
:set nobomb
:w
perl の場合は、
となります。-0 はレコードセパレータ $/ を 8 進数で指定しますが、指定しない場合はファイル全体を読み込みます。
$ perl -0 -i.bak -pne 's/^\xEF\xBB\xBF//' hoge.xml
BOM 付きと既に分かっている場合 tail を
のように使う方法もあります。
$ L=`cat hoge.xml | wc -c` && tail -c `expr $L - 3` hoge.xml > hoge_new.xml