普通の人はあんまり見ることはない気もしますが、IMAPでフォルダ名に日本語を使うと、BASE64みたいな、アルファベットや記号など7bitコード文字だけにエンコードされた名前になります。
あれって、IMAP-UTF7という名前のエンコーディングなんだそうです。
簡単にデコードできるツールってないかな?と思って、FreeBSDのportsの中を探してみたら、
ports/converters/p5-Unicode-IMAPUtf7/
というのがありました。
付属していたスクリプトをそっくりマネして書いただけなんですが、とりあえずテストするスクリプト。
require 'Unicode/IMAPUtf7.pm';
my $t = Unicode::IMAPUtf7->new, 'Unicode::IMAPUtf7';my @input = qw(&Tgtm+DBN- &kAFP4W4IMH8wojCkMMYw4A- &j,dg0TDhMPww6w-);
for (my $i = 0; $i < @input; $i++) {
$tmp = $t->decode($input[$i]);
print "|" . $input[$i] . "| -> |$tmp|\n";
}
実行してみる。
% perl imap-utf7.pl | nkf
|&Tgtm+DBN-| -> |下DBN-|
|&kAFP4W4IMH8wojCkMMYw4A-| -> |送信済みアイテム|
|&j,dg0TDhMPww6w-| -> |迷惑メール|
なるほど・・・
ただ、1個めのデコード結果がおかしいような。本当は「下書き」になるはずなんだけど。
nkfがおかしいのかな?と思い、iconv。
% perl imap-utf7.pl | iconv -f 'utf-8' -t euc-jp
|&Tgtm+DBN-| -> |下DBN-|
|&kAFP4W4IMH8wojCkMMYw4A-| -> |送信済みアイテム|
|&j,dg0TDhMPww6w-| -> |迷惑メール|
だめですね。
いろいろ試す。
|&Tgtm+DBN-| -> |下DBN-|
|&Tgs-123| -> |下123|
|&ZvgwTQ-| -> |書き|
|&ZvgwTw-| -> |書く|
|&Tgswa2b4ME0-| -> |下に書き|
|&Tgtm+A-| -> |下A-|
「下書」がアウトらしい・・・
ひょっとして、Unicode/IMAPUtf7.pm がおかしい???