稲沢市よりお届けしてます。

Perlをはじめとしたプログラミング周りのあれこれについて。Perl界のモブキャラとして暗躍します(謎)。

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にも似たような機能あるのかな??