imapsyncでモバメをGmailにコピーする その2
特に実用上支障はない(自分は使わないので)けど、日本語のフォルダが文字化けする。
これはデコードにUnicode::Stringを使ってるせいで、Encode::IMAPUTF7を使うとうまくいく。
IMAP4ではUTF-7ではなく修正UTF-7というものを使っているのが原因らしいが、まあ詳しく調べる気はあんまりない。
use strict; use warnings; use Unicode::String; use Encode; use Encode::IMAPUTF7; my $s = shift; print imap_utf7_decode($s); print "\n"; print encode('utf8', imap_utf7_decode2($s)); sub imap_utf7_decode2 { my $s = shift; return decode('IMAP-UTF-7', $s); } # Copied from http://cpansearch.perl.org/src/FABPOT/Unicode-IMAPUtf7-2.01/lib/Unicode/IMAPUtf7.pm # and then fixed with # https://rt.cpan.org/Public/Bug/Display.html?id=11172 sub imap_utf7_decode { my ( $s ) = shift ; # Algorithm # On remplace , par / dans les BASE 64 (, entre & et -) # On remplace les &, non suivi d'un - par + # On remplace les &- par & $s =~ s/&([^,&\-]*),([^,\-&]*)\-/&$1\/$2\-/xg ; $s =~ s/&(?!\-)/\+/xg ; $s =~ s/&\-/&/xg ; return( Unicode::String::utf7( $s )->utf8 ) ; }
$ perl u7.pl "&,wM- 90&ZeVO5VJNMG5T10,hMOEw,DDr-" # 90日以前の受,hMOEw,DDr- # 90日以前の受信メール
それにしてもimapsync、しょうもないバグが多くないか。重要なバグがないから良いという考え方もあるが。
imap_utf7_encode()も同じように直したほうがいいかもしれない(未確認)