XML::Simpleで文字化けしない方法

2010年6月18日
| コメント(1) | トラックバック(0) XML::Simpleで文字化けしない方法

普段、MovableTypeのプラグインでお世話になっている「小粋空間」さんが、意外なところで躓いていた。

以上です。色々調べてこれが最適解と思ったのですが、より適切な解決方法がありましたらコメントください。

「より適切」かどうかは分かりませんが、よりモダンな感じの解決方法を考えてみます。

考え方としては、XML::SimpleのXMLinが内部文字列を返すのであれば、スクリプトを内部文字列化してやれば解決するのでは、という感じです。

まずは、スクリプトを「use utf8;」してしまいます。
そうすると、スクリプトに書かれている文字はPerlの内部空間と同じ状態(内部文字列)になります。

で、このまま出力すると「Wide Character」の問題が出ますので、出力時にはutf8でエンコードしてやります。

それを踏まえて書きなおすと以下のようになります。

#!/usr/bin/perl
 
use strict;
 
use utf8;
binmode STDOUT => ":utf8";
 
use CGI;
use XML::Simple;
 
my $q = new CGI;
print $q->header(-charset=>'utf-8');
print $q->start_html;
 
my $xml = XMLin('foo.xml');
my $name = $xml->{name};
 
print <<EOF;
<form method="post" action="hoge.cgi">
名前:<input type="text" id="hoge" name="hoge" value="$name" />
<input type="submit" name="submit" value="送信" />
</form>
EOF
 
print $q->end_html;

これで文字化けはしません。

トラックバック(0)

このブログ記事に対するトラックバックURL:

コメント(1)

なるほど。utf8プラグマも調べている最中にみつけたのですが、そこまで調べきれてませんでした。
ありがとうございました!

コメントする

Google検索

Last.fm

このブログ記事について

このページは、のぶりんが2010年6月18日 23:04に書いたブログ記事です。

ひとつ前のブログ記事は「Yahooのトピックスを取得する他の手段」です。

次のブログ記事は「今さらだけどCGI::Carp::DebugScreenを覚えた」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Creative Commons License
このブログのライセンスは クリエイティブ・コモンズライセンス.
Powered by Movable Type