旧JISでの文字化け

XEmacs + Mew であるMLだけ文字化けします。 ファイルを直接読んでも化けます。 古い Mule では化けません。 そこで次のようなPerlスクリプトを作って調べてみました。

#!/usr/local/bin/perl

while (<>) {
  $ascii++ if /\e\(B/;
  $jiso++  if /\e\$@/;
  $jisn++  if /\e\$B/;
  $jisr++  if /\e\(J/;
}
print "ASCII:    ", $ascii, "\n";
print "新JIS:    ", $jiso,  "\n";
print "旧JIS:    ", $jisn,  "\n";
print "ローマ字: ", $jisr,  "\n";

そのMLのメールだけ旧JIS,ローマ字になっていることがわかりました。 そこで次のようなスクリプトで変換することにしました。

#!/usr/local/bin/perl

while (<>) {
  s/\e\(J/\e\(B/g;
  s/\e\$@/\e\$B/g;
  print;
}

これを ~/change.pl として,コマンドラインで次のように打ち込みます。

for x in *; do ~/change.pl $x >foo; mv foo $x; done

もしタイムスタンプを保存したいなら次のようにするといいでしょう。

for x in *
do
    ~/change.pl $x >foo
    touch -r $x foo
    mv foo $x
done

リンクはご自由にどうぞ。

松阪大学 奥村晴彦 okumura@matsusaka-u.ac.jp

Last modified: Sat Oct 23 11:53:51 JST 1999