2 votes

Comment puis-je convertir les messages d'un fichier mbox en UTF-8 ?

J'essaie de modifier le programme ci-dessous pour faire en sorte que chaque message soit converti en utf-8 en utilisant Encode::decode(), mais je ne suis pas sûr de savoir comment et où placer ceci pour que cela fonctionne.

#!/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

}

0voto

singpolyma Points 5586

Rien dans le script ne semble spécifier dans quel encodage vous attendez l'entrée... normalement c'est important puisque l'auto-détection des encodages de caractères est difficile (et n'est généralement pas supportée par les bibliothèques d'encodage).

0voto

Leon Timmermans Points 23230

D'après la documentation, je suppose que vous voulez remplacer

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

avec

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

Mais je ne suis pas tout à fait sûr et ça n'a peut-être aucune importance.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X