Perlを中心とした技術系の話などをつらつら

2005年03月25日

mod_perl + encodingプラグマでサイト全体が文字化け

perl5.8から導入されたencodingプラグマを利用してSTDOUTの文字コードを透過的にエンコーディングして出力するようなスクリプトをmod_perl環境で実行すると、encodingプラグマの影響がそれを実行したapacheプロセスに残ってしまい、それ以降に実行されるすべてのスクリプトもこの影響を受けてしまうようです。

仮にEUCでサイトを構築していた場合、

#!/usr/bin/env perl
use strict;
use encoding 'euc-jp', STDOUT => 'utf8';
print "Content-type: text/html; charset=utf8;\n\n";
print "こんにちは";

のようなスクリプトを実行してしまうと、このスクリプトを実行したApacheの子プロセスにおいて、それ以降のすべての出力がUTF8にエンコーディングされてしまい、結果サイトが文字化けしてしまうことになります。

mod_perl環境ではencodingプラグマは使用しないで、JcodeとかEncodeモジュールを利用するほうがよさそうです。

  • Jcodeを使う場合
#!/usr/bin/env perl
use strict;
use Jcode;
print "Content-type: text/html; charset=utf8;\n\n";
print Jcode->new("こんにちは", 'euc')->utf8;
  • Encodeのfrom_toを使う場合
#!/usr/bin/env perl
use strict;
use Encode;
my $str = "こんにちは";
Encode::from_to( $str, 'euc-jp', 'utf8');
print "Content-type: text/html; charset=utf8;\n\n";
print $str;

Technorati TAGTechnorati TAG , , ,

Posted by horiuchi at 2005年03月25日 00:29

Continuing the discussion...

このエントリーのトラックバックURL:
http://hori-uchi.com/mt/trackback/307

このリストは、次のエントリーを参照しています: mod_perl + encodingプラグマでサイト全体が文字化け:

hori-uchi.com: mod_perl + encodingプラグマでサ...

続きを読む: mod_perlでencodingプラグマを使わないように

from HT::Blog at 2005年03月25日 08:45

Comments

Post a comment




Remember personal info?