自分の作業メモです。
テキストファイルの文字コードを定期的に変更する必要があったので、スクリプトを書くことになりました。
変換元はUTF-8、変換先はShift_JISです。
最近Perlに慣れてきたので、最初はPerlで書いてみました。
use Encode; open my $r, '<:encoding(UTF-8)', 'utf8.txt'; open my $w, '>:encoding(cp932)', 'sjis.txt'; while(my $d = <$r>) { print $w $d; } close $w; close $r; exit;
確かどこかのサイトで拾ってきたコードのモディファイです。
しかし、これをWindows上のPerlで実行すると、「No.」や「〜」が「\x{2116}」や「\x{ff5e}」のようになって、100点満点の結果が得られませんでした。
2011.11.08 05:30am 追記
Windowsの場合は独自拡張したShift_JISが使われているので、「:encoding(shiftjis)」ではなく、「:encoding(cp932)」を指定する必要があります。
同じく、VBScriptを使ってみることにしました。
Dim EucStream 'ADODB.Stream Dim SjisStream 'ADODB.Stream Dim Line Set EucStream = CreateObject("ADODB.Stream") EucStream.Charset = "UTF-8" 'EucStream.LineSeparator = 10 EucStream.Open Set SjisStream = CreateObject("ADODB.Stream") SjisStream.Charset = "SHIFT_JIS" SjisStream.Open EucStream.LoadFromFile("utf8.txt") Do Until EucStream.EOS Line = EucStream.ReadText(-2) 'Lineの処理 SjisStream.WriteText Line,1 Loop SjisStream.SaveToFile "sjis.txt", 2 EucStream.Close SjisStream.Close Set EucStream = Nothing Set SjisStream = Nothing
こちらもネットで見つけたコードのパクリです。。。
VBScriptにすると、"CP932"にしなくてもうまく変換してくれました。
めでたしめでたし。