2008-03-05 22:17:51

Perl の バイト列→Unicode 処理について

[Perl]

ニパターンある

※バイト列の文字コードはUTF8とする。
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use Encode;
use Unicode::RecursiveDowngrade;

my $str = 'utf8';
#my $str = 'ユーティーエフ';

# Pattern A
utf8::decode($str); #これのみだと $str = 'utf8' は素通りされてフラグがたたない
utf8::upgrade($str); #これのみだとフラグはたつが $str = 'ユーティーエフ' は文字化けで戻せなくなる

# Pattern B
$str = decode_utf8($str); # Need use Encode;

if ( utf8::is_utf8($str) ) {
        print "On\n";
}
else {
        print "Off\n";
}
print Dumper($str);

my $rd = Unicode::RecursiveDowngrade->new;
my $strz = $rd->downgrade($str);

if ( utf8::is_utf8($strz) ) {
        print "On\n";
}
else {
        print "Off\n";
}
print Dumper($strz);

ex) http://subtech.g.hatena.ne.jp/miyagawa/20080218
ex) http://blog.livedoor.jp/dankogai/archives/51004472.html
ex) http://subtech.g.hatena.ne.jp/miyagawa/20060820/1156076116

ex2) http://d.hatena.ne.jp/dayflower/20080219/1203493616