give IT a try

プログラミング、リモートワーク、田舎暮らし、音楽、etc.

PerlとVBScriptでテキストファイルの文字コードを変換する

自分の作業メモです。
テキストファイルの文字コードを定期的に変更する必要があったので、スクリプトを書くことになりました。
変換元は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"にしなくてもうまく変換してくれました。


めでたしめでたし。