■2004-09-28
* [雑感] モニタが壊れてまあ大変
日曜日、鬱々と”今月のAcme”を書いていたところ、モニタが突然真っ暗になってそれっきりでした。しかたないので前機NEC PC-9821V12に付属していたモニタを使っています。捨てなくてよかったです。でも大変見づらいです。今まではDiamondtronを使ってましたが、今度は液晶にしようかしら。Acmeは特別編にて後日。
* [Perl] EncodeモジュールでISO-2022-JP MIME-Header
Template-Toolkitの日本語情報を探していてたどり着いたページで、EncodeモジュールでUTF-8にエンコードされたMIME-Headerが、携帯メーラなどで解釈できないので結局Jcodeを使うことにしたとあります。せっかくEncodeモジュールが利用できるのにJcodeに戻すのはなんだか残念です。もちろんEncodeのラッパーであるJEncodeも同じで、今ままではUTF-8でも大抵のメーラが対応していると思って放置していました。そこでなんとか楽をしつつISO-2022-JPに対応できる方法を考えてみたいと思います。で、とりあえずEncode::MIME::Hedaer:ISO_2022_JP
というサブクラスをつくって、utf8しているところをiso-2022-jpになるようオーバーライドすることにしました。ところが、Encode::MIME::Header
ではmime-encodeを実行するサブルーチンのリファレンスが定数(constant subroutine)の中に埋め込まれていて、その定数からデリファレンスして呼び出されています。つまり、エンコード処理部分が実質的にprivateになっていて、楽ができないのです。結局、周辺部分からシンボルテーブルを弄って、何とか最小限の努力でISO-2022-JPにエンコーディングできるようになりました。もっとうまい方法をご存知の方がいらっしゃいましたらぜひ教えてください。
というわけで、JEncode v.1.30からMIME-HeaderのエンコードにISO-2022-JPをサポート。ただし、通常は従来通りUTF-8で行い、$JEncode::MIME_HEADER_ISO2022JP
に真値を設定するとISO-2022-JPでエンコードするようになります。本当にうまくいってるのかな?
[追記] mime_encode
, mime_decode
ともに正しい処理をしていませんでした。とくにmime_encodeは前から正しくなかったようです。1.31で修正しました。