トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

技術的雑談-Config::Simpleでの日本語文字化け

技術的雑談-Config::Simpleで文字化け


 環境

  • 確認したのはCentOS4.3、perl5.8.6
  • Config-Simple-4.59

 現象

  • Config::Simple用のConfigファイルに日本語が含まれていると文字化けする。

 原因


わかっている事は、Config::Simpleだけでは文字化けしないことです。
以下のScriptをtest.cgiとしてEUC-JPで保存します。

#!/usr/bin/perl

use strict;
use Config::Simple;

print "Content-type: text/html;charset=EUC-JP\n\n";

print "<html><head><title>Test page</title></head><body>\n";
print "<h1>これはテストページです</h1>\n";

# Config File読み込み
my $cfg = new Config::Simple('test.cfg') or print "<p> Config::Simple->error()</p>";

my $data1 = $cfg->param("data1");
my $data2 = $cfg->param("data2");
my $japanese = $cfg->param("japanese");
my $hoge = $cfg->param("hoge");

print "<p>\n";
print "[ Datas ]<br>\n";
print "data1 = ${data1}<br>\n";
print "data2 = ${data2}<br>\n";
print "japanese = $japanese<br>\n";
print "hoge = $hoge<br>\n";

print "</p>\n";

print "</body></html>\n";

$cfg->save();

1;

ここに、以下のような「test.cfg」というファイルを用意します。(EUC-JPで保存します)

# test data
data1 = abcdefg
data2 = qqqqq
japanese = ほげほげ
hoge = ふがふが

このテストプログラムの出力は文字化けせずにちゃんと表示されます。
Scriptの最後で「save()」していても、ちゃんとConfigファイルは文字化けしない日本語で保存されます。

しかし、仮にこのプログラムが中で日本語出力する事を前提に作ってあり、「Multi byteなんたら〜」というwarnningがうっとおしくて「use encoding "euc-jp";」を使ったとします。
(上記リストの3行目と4行目の間に「use encoding "euc-jp";」を書き加えます。)

すると、1度目は正しい出力ができますが、2回目にScriptを呼び出すと、文字化けします。

原因はsave()で出力されたConfigファイルが文字化けしている為です。

 対処

今の所、「use encoding "euc-jp";」を使わないのが唯一の解決っぽいです。

「use open IO => ":encoding(euc-jp)";」とかも同様にダメっぽいです。

もちろんsave()しないで「読みっぱなし」のConfigファイルなら大丈夫なのですが…。


 履歴

2006/10/24 -- 初版

技術的雑談へ戻る

 突っ込み

name   comment  
URL (入力するとす ぱ むとみなします!)


技術的雑談へ戻る

TrackBack

TrackBack URL for this entry:
http://www.himajin2001.com/fswiki/tb.cgi/%B5%BB%BD%D1%C5%AA%BB%A8%C3%CC%2DConfig%3A%3ASimple%A4%C7%A4%CE%C6%FC%CB%DC%B8%EC%CA%B8%BB%FA%B2%BD%A4%B1

技術的雑談へ戻る

最終更新日時:最終更新時間:2006年10月24日 18時05分18秒
トップページに戻る