2008-12-16 39 views
2

我試圖修改下面的程序,以確保使用Encode :: decode()將每個msg轉換爲utf-8,但我不確定如何以及在何處放置它以使其工作。如何將mbox文件中的郵件轉換爲UTF-8?

#!/usr/bin/perl 
use warnings; 
use strict; 
use Mail::Box::Manager; 

open (MYFILE, '>>data.txt'); 
binmode(MYFILE, ':encoding(UTF-8)'); 


my $file = shift || $ENV{MAIL}; 
my $mgr = Mail::Box::Manager->new(
    access   => 'r', 
); 

my $folder = $mgr->open(folder => $file) 
or die "$file: Unable to open: $!\n"; 

for my $msg (sort { $a->timestamp <=> $b->timestamp } $folder->messages) 
{ 
    my $to   = join(', ', map { $_->format } $msg->to); 
    my $from  = join(', ', map { $_->format } $msg->from); 
    my $date  = localtime($msg->timestamp); 
    my $subject  = $msg->subject; 
    my $body  = $msg->decoded->string; 

    # Strip all quoted text 
    $body =~ s/^>.*$//msg; 

    print MYFILE <<""; 
From: $from 
To: $to 
Date: $date 
Subject: $subject 
\n 
$body 

} 
+0

我認爲如果你把這個「問題」分解成它的組成部分,對我們所有人來說都會容易得多。 – innaM 2008-12-16 12:18:13

回答

0

在腳本中似乎沒有任何可以指定你期望的輸入是什麼編碼......通常這是因爲字符編碼的自動檢測重要硬(而不是通常的編碼庫支持)。

0

從你想

my $body  = $msg->decoded('UTF-8')->string; 

更換

my $body  = $msg->decoded->string; 

雖然我不能完全肯定我懷疑的文件,它可能不會在所有問題。