UTF-8 ファイルの BOM を取り除く正規表現(Perl)


先日、utf8 エンコーディングで読み込んだファイルのBOM(※)を取り除く正規表現を探すのに時間が掛かったので書いておきます。

※BOM
Byte Order Mark。テキストファイルの保存文字コードが UTF-8 である事の印にファイルの冒頭に付いている事のある記号。

対象文字列が Perl 内部表現になっている場合

encoding を指定して読み込んだファイルや、読み込んだ後 Encode::encode でエンコード済の場合。なお、プログラムを use utf8 した状態で実行しているかどうかは無関係(←【ここ重要】はまりやすい)。

$str =~ s/^\x{FEFF}//;

生文字列の場合

encoding を指定しないで読み込んだファイルや、フォームから送信されたままの状態のファイル内容の場合。

$str =~ s/^\xef\xbb\xbf//;