2010-03-18 18 views
11

J'ai cet avertissement chaque fois que je lance mon script CGI (la sortie est rendu par modèle :: Toolkit):Comment est-ce que j'élimine l'avertissement "Caractère large à l'impression" de TT?

Wide character in print at /usr/local/lib/perl5/site_perl/5.8.9/mach/Template.pm line 163.

Quelle est la bonne façon de l'éliminer?

je crée l'objet tt en utilisant cette config:

my %config = (
     ENCODING  => 'utf8', 
     INCLUDE_PATH => $ENV{TEMPLATES_DIR}, 
     EVAL_PERL => 1, 
} 
my $tt = Template->new(\%config); 

Répondre

8

Mettre cela avant l'appel à $tt->process() d'avoir la sortie codée automatiquement:

binmode STDOUT, ':utf8'; 

Modifier: Comme mentionné daxim, il est possible d'utiliser les fonctions de codage de TT:

$tt->process($infile, $vars, '-', { binmode => ':utf8' }) 

Cela dépend de la convention largement utilisée que le nom de fichier '-' vous donne STDIN lorsqu'il est ouvert pour la lecture, et STDOUT lorsqu'il est ouvert pour l'écriture.

Édition 2: BTW, la dernière façon ne semble pas fonctionner pour moi sous mod_perl (2.0.5).

+1

http://ahinea.com/fr/tech/perl-unicode-struggle.html – Quentin

+0

Est-ce que cela auto-encoder la sortie dans n'importe quel encodage? Si c'est le cas, c'est génial! – planetp

+0

@planetp: Oui. Voir http://perldoc.perl.org/perlunifaq.html#Is-there-a-way-to-automatically-decode-or-encode? –

1
$tt->process($infile, $vars, $outfile, { binmode => ':encoding(UTF-8)' }) 

Ceci est documenté dans http://search.cpan.org/perldoc?Template#process%28%24template%2C_%5C%25vars%2C_%24output%2C_%25options%29.

+1

Cela ne semble fonctionner que lors de la sortie dans un fichier: 'La seule option actuellement supportée est binmode qui, lorsqu'elle est définie sur une vraie valeur, assurera que les fichiers créés (mais pas les handles de fichiers existants) seront en mode binaire.» –

+1

Votre spéculation est fausse. Voulez-vous annuler votre vote? Pourquoi ne l'avez-vous pas testé vous-même au lieu de bavarder? 'Template-> new-> processus (\ 'foo [% bar%] quux', {bar =>" \ x {4e71} "}, '-', {binmode => ': encodage (GB2312)'}) ; ' – daxim

+0

Je voudrais que votre réponse soit meilleure si elle incluait cet exemple et expliquait ce que le nom de fichier spécial' "-" 'signifiait par convention. –