Perl でUTF-8(BOM無し)ファイルをUTF-8(BOM付き)に変換する方法
Windows 向けのソフトに読み込ませるファイルをUTF-8(BOM付き)にする必要があったので、やってみた。TeraPadで開いて「文字コード指定保存」すればできるんだけど、スクリプト処理の一連の流れに乗せたかったので、やってみますた。
Windows7(64bit)環境でやってま〜す。
#!/usr/bin/perl # # UTF-8(BOM無し) ⇒ UTF-8(BOM付き)にファイルを変換する # # 2014.09.07_scripted by perl48 use strict; use warnings; use utf8; # 読み込むファイル名をセット my $old = 'before.txt'; # 書き出すファイル名をセット my $new = 'after.txt'; # ファイルハンドルをオープンして、外部テキストファイルの読み込み準備 open my $read, '<', $old or die "Couldn't open : $!"; # ファイルハンドルをオープンして、外部テキストファイルへ書き出し準備 open my $write, '>', $new or die "Couldn't open : $!"; print {$write} "\x{feff}" ; # BOMを先頭につける # 1行ずつ読みで、ただ書き出す while (my $line = <$read>) { chomp $line; print {$write} $line . "\n"; } # ファイルハンドルを閉じる close $read; close $write;
File::BOM っていうモジュールもあるみたいだけど、標準の環境で済ませたかったので文頭に{ EF BB BF } をつけてBOMりました。
↑ TeraPadで開くと下のほうのバーに「UTF-8N」ってなってる。これがBOM無し状態。
で、上記のスクリプトを実行すると・・・
↑ TeraPadで開くと下のほうのバーに「UTF-8」ってなる。これがBOM付き状態。
Ubuntu のときは nkf コマンドで済ませちゃいます。コマンドプロンプトかPowerShellにも似たような機能あるのかな??