ルモーリン
ホーム更新サービス雑談ランドナーコースガイド鉄ゲタ自転車Linuxリンク連絡先

ファイルの文字コード変換は本体に任せよう

きっかけ

1行ずつ変換するコードを見かけたので。
WindowsパソコンでPerl置き換え演算子s// で発生した文字化けを Encode.pm でスマートに解決! - Perl楽しいから好き

コードを書いてみた

ポイント
  1. openでファイルの文字コードを指定しておけば入出力の際に自動変換
  2. 文字列を\Q~\Eで囲めば丸ごとエスケープ(変数を指定する記号「$」に効かないので個別にエスケープ)
  3. デフォルトの特殊変数「$_」を利用
#!/usr/bin/env perl -w

use utf8;
use strict;
use warnings;

use open IO => ":utf8";
use Encode::Argv;
use Encode::Locale;

binmode STDIN, ":encoding(console_in)";
binmode STDOUT, ":encoding(console_out)";
binmode STDERR, ":encoding(console_out)";

$| = 1;

my $file_r = "sample_36_idle.txt";
my $file_w = "sample_36_idle_now.txt";

open my $r, "< :encoding(cp932)", Encode::encode locale_fs => $file_r or die "ファイルを開けません '$file_r'";
open my $w, "> :encoding(cp932)", Encode::encode locale_fs => $file_w or die "ファイルを開けません '$file_w'";
while (<$r>) {
	chomp;
	s/\QAKB48(*゚∀゚)=3\E/ももいろクローバーZ(*゚∀゚)モノノフ=3/;
	print $w "$_\n";
	print "$_\n";
}
close $r;
close $w;

exit;

実行結果

例によってWindows7(Perl 5.26)とCentOS(Perl 5.24)で確認しました。
経済が不況になるとアイドルが活躍すると言う評論家がいます。
長引く平成不況に躍進したのはももいろクローバーZ(*゚∀゚)モノノフ=3
ももいろクローバーZ(*゚∀゚)モノノフ=3は紅白歌合戦に出場するなど、
テレビで見ない日はないというくらい激しく活動しています。