September 2005
September 25, 2005
September 24, 2005
このあいだ紹介した、Unicode::RecursiveDowngrade ですが、弾さんが、
404 Blog Not Found:UTF-8 Flagを落とそうとして思わぬBugを見つけた話
確かに、Storable の perldoc を読むと
いやぁ、これは全然知らんかったですねぇ…。
が、しかし、弾さんが
で、今日ナニゲに CPAN を散策していたら、Unicode::RecursiveDowngrade が 0.02 にバージョンアップしていますねぇ。
見る限り、弾さんが指摘していた二点も解消されているっぽいです。
ということで、その二点が気になる方は、いつ訪れるかわからない Storable の bugfix を待つよりは、Unicode::RecursiveDowngrade の 0.02 以降を使ったら良さそうです。
ちとモジュール名が長すぎてタイプ量が多いのがアレですが。。。
404 Blog Not Found:UTF-8 Flagを落とそうとして思わぬBugを見つけた話
これじゃ、駄目。と一言で、一刀両断されてますた。
以下ダメな点を。と駄目な点を挙げつつ、Storable モジュールの
- Hash Keyに未対応
- Blessed Referenceに未対応
$Storable::drop_utf8
というのを使ったソリューションを公開されてました。確かに、Storable の perldoc を読むと
Perl 5.6 added support for Unicode characters with code points > 255, and Perl 5.8 has full support for Unicode characters in hash keys. Perl internally encodes strings with these characters using utf8, and Storable serializes them as utf8. By default, if an older version of Perl encounters a utf8 value it cannot represent, it willとちゃんと明記されています。croak()
. To change this behaviour so that Storable deserializes utf8 encoded values as the string of bytes (effectively dropping the is_utf8 flag) set$Storable::drop_utf8
to someTRUE
value. This is a form of data loss, because with$drop_utf8
true, it becomes impossible to tell whether the original data was the Unicode string, or a series of bytes that happen to be valid utf8.
いやぁ、これは全然知らんかったですねぇ…。
が、しかし、弾さんが
ダメダメいうだけではダメなので、以下、代案....を出そうとしたら、StorableのBugを見つけてしまったかも。なんやら、Storable のこのあたりがバグってらっしゃる模様。
で、今日ナニゲに CPAN を散策していたら、Unicode::RecursiveDowngrade が 0.02 にバージョンアップしていますねぇ。
見る限り、弾さんが指摘していた二点も解消されているっぽいです。
ということで、その二点が気になる方は、いつ訪れるかわからない Storable の bugfix を待つよりは、Unicode::RecursiveDowngrade の 0.02 以降を使ったら良さそうです。
ちとモジュール名が長すぎてタイプ量が多いのがアレですが。。。
September 21, 2005
ひさびさに Blog を書いてみる。
UTF-8 フラグがどうもウザいという人向けにこんな CPAN モジュールがあるそうな。
Unicode::RecursiveDowngrade
hashref とか、arrayref とか複雑な構造になった変数 (たとえば XML や RSS を XML::Simple や XML::RSS 等で parse した構造) を、構造を変えることなく、値全ての UTF-8 フラグを一括で落としたい場合にベンーリ。
こんなんして使える模様。
こりゃ使えますな…。
とシラジラしく言ってみるテスツ。
UTF-8 フラグがどうもウザいという人向けにこんな CPAN モジュールがあるそうな。
Unicode::RecursiveDowngrade
hashref とか、arrayref とか複雑な構造になった変数 (たとえば XML や RSS を XML::Simple や XML::RSS 等で parse した構造) を、構造を変えることなく、値全ての UTF-8 フラグを一括で落としたい場合にベンーリ。
こんなんして使える模様。
use strict; use XML::Simple; use Unicode::RecursiveDowngrade; use Data::Dumper; my $ref = XMLin('hoge.xml'); # includes flagged UTF-8 my $rd = Unicode::RecursiveDowngrade->new; $ref = $rd->downgrade($ref); # unflagged UTF-8 print Dumper $ref;
filter()
メソッドと併用すると、一括で文字コード変換とかも出来るっぽい。
use strict; use XML::Simple; use Unicode::RecursiveDowngrade; use Unicode::Japanese; use Data::Dumper; my $ref = XMLin('hoge.xml'); # includes flagged UTF-8 my $rd = Unicode::RecursiveDowngrade->new; $rd->filter(sub { Unicode::Japanese->new(shift, 'utf8')->euc }); $ref = $rd->downgrade($ref); # unflagged EUC-JP print Dumper $ref;ふーむ。
こりゃ使えますな…。
とシラジラしく言ってみるテスツ。