よたらぼ
自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

January 28, 2008 [おもひで]

[Rails] ActionMailerで文字化け

ActionMailerとRuby-GetTextを使うとたまにUTF-8→ISO-2022-JPの変換に失敗したりして文字化けするとのレポートと、その回避策をいただいた。

最初は、このパッチをそのまま取り入れようと思ったのだが、きちんと考えてみることにした。

まず、いただいたパッチではinput(メッセージを作るところまでの文字コード)を$KCODEで指定している。output(実際にメールとして出力される文字コード)はISO-2022-JPだ。

Ruby-GetText + Railsでは、内部の文字コードは$KCODEというよりも、GetText.output_charsetで指定されたものが使用されることになる。実際は$KCODEとoutput_charsetを揃えないとまともに実行はできないので、まぁ、これはこれで良いとは思うのだけど、厳密にするならoutput_charsetを使った方が良いように思う。

次に・・・これはそもそも論になるのだけど、Ruby-GetTextのActionMailerサポートは、日本語しかサポートできていない。

これはやっぱりいけていない。inputは$KCODEに従うにしろoutput_charsetに従うにしろ、outputは各言語ごとに指定できた方がよいかもしれない。となると、NKFではなく、Iconvに切り替えた方が良いような気もする。

さらに言うと、NKFはJRubyではまったく使えない。Iconvも使えないけどPseudo IconvレベルのものはRuby-GetTextで用意できたのでIconvの方がちょっと有利。

しかしながら、パッチの詳細を見ていくと、NKFの細かなオプションまで使用しているので、逆に言うとここまで指定できるようなものも用意しないと文字化けを避けれないのかもしれない(とするとやはり日本語のみNKFを使えるようにするとか・・・)。

というあたりで眠くなってきたので寝ることにする。やっぱり、もう少しゆっくり考えてみよう。


編集