2008-12-16 3 views
2

J'essaie de modifier le programme ci-dessous pour m'assurer que chaque message est converti en utf-8 en utilisant Encode :: decode(), mais je ne sais pas comment et où le placer pour le faire fonctionner.Comment puis-je convertir des messages dans un fichier mbox en 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

Je pense que ce serait beaucoup plus facile pour nous tous si vous cassiez cette "question" dans ses composants. – innaM

+0

ok je vais faire, je suis inquiet de coller le code à chaque fois si. –

+0

Il n'est pas nécessaire de coller du code lorsque la question est de savoir comment implémenter le retour à la ligne. Il n'est pas nécessaire de coller le script complet pour savoir comment gérer les pièces jointes. – innaM

Répondre

0

Rien dans le script semble spécifier quel encodage vous attendez que l'entrée soit dans ... normalement ce qui est important puisque la détection automatique des encodages de caractères en dur (et généralement pas pris en charge par le codage des bibliothèques).

0

De la documentation Je suppose que vous voulez remplacer

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

avec

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

Bien que je ne suis pas complètement sûr et il ne peut rien du tout.

Questions connexes