LinuxでUTF-8のBOMを削除する

Wed May 17, 2017 in server using tags vim , utf-8

Table of Contents

Linux上でUTF-8のファイルに含まれるBOM(Byte Order Mark)を削除する方法です。Webで検索するとたくさん情報が出てきますが、今回はvimを使った方法を残しておきます。

きっかけとしては、Windowsで作成したシェルスクリプト(UTF-8)をLinuxで実行した際に1行目でエラーが出力されたことです。なぜエラーが出るのか調べてみるとBOMが原因であることがわかりました。 Windowsのnotepadで保存するとBOM付きで保存されるようです。

BOMの確認

ファイルをcatやemacsで表示しても通常はBOMを見ることはできません。これはプログラムがBOM付き、BOMなしに関わらずうまく解釈して表示してくれるからです。ですが、lessやmoreではBOMをそのまま表示してくれますので、BOM有無の判断に使用できます。<U+FEFF>がBOMです。

$ less bom.txt
<U+FEFF>#!/bin/sh
echo hoge

BOMの削除

通常vimでファイルを開くとBOM付き、BOMなしを意識せず開いてくれます。ここで「-b(バイナリモード)」オプションをつけてvimを起動するとBOMを表示することができます。

$ vim -b bom.txt
<feff\>#!/bin/sh
echo hoge

あとはBOM(↑でいうところの<feff>)を削除して保存すれば、BOMなしファイルができます。

以上