UTF8のBOMを取り除くスクリプト

30分プログラム、その554。UTF8のBOMを取り除くスクリプト
BOMって邪魔ですよね。ASCIIしか書いてないファイルに、なぜか0xFEとか入ってるんですもん。何も考えずにcatでファイルを連結してると、途中にBOMが入ってしまって死にそうになる。
というわけで、これを取り除くスクリプトを書いてみよう。

ちなみにBOMの付けたい場合は、nkfを使うといいよ。

$ nkf -w8 non-bom.txt > bom.txt

使い方

$ perl bom-strip.pl bom.txt > non-bom.txt

ソースコード

#! /usr/bin/perl
# -*- mode:perl; coding:utf-8 -*-
#
# bom-strip.pl -
#
# Copyright(C) 2009 by mzp
# Author: MIZUNO Hiroki / mzpppp at gmail dot com
# http://howdyworld.org
#
# Timestamp: 2009/03/27 21:36:51
#
# This program is free software; you can redistribute it and/or
# modify it under MIT Lincence.
#
use strict;
use warnings;
use Data::Dumper;
use Encode;

my $bom =encode('utf8',"\x{FEFF}");

sub strip($){
    my ($path) = @_;
    open my $fh,'<',$path;
    my $buffer = join "",<$fh>;
    close $fh;

    if(substr($buffer,0,3) eq $bom){
	substr($buffer,3);
    }else{
	$buffer;
    }
}

foreach (@ARGV) {
    print strip($_);
}