due punti di partenza:È corretto cambiare l'IO di Perl predefinito in utf-8 mentre si usano Plack e Middlewares?
- In his answer to Why does modern Perl avoid UTF-8 by default? tchrist sottolineato 52 cose necessarie per assicurare la corretta movimentazione Unicode in Perl. La risposta mostra il codice boilerplate con alcune dichiarazioni
use
. Una domanda simile sull'uso di Unicode è How to make "use My::defaults" with modern perl & utf8 defaults? Il PSGI spec è di progettazione orientata ai byte. E 'mia responsabilità di codificare/decodificare tutto, quindi per il Plack applicazioni il modo corretto è quello di codificare l'uscita e decodificare di input, ad esempio:
use Encode; my $app = sub { my $output = encode_utf8(myapp()); return [ 200, [ 'Content-Type' =>'text/plain' ], [ $str ] ]; };
È corretto utilizzare
use uni::perl; # or any similar
nell'applicazione PSGI e/o nei miei moduli?
uni::perl
cambia di default di Perl IO a UTF-8, quindi:
use open qw(:std :utf8);
binmode(STDIN, ":utf8");
binmode(STDOUT, ":utf8");
binmode(STDERR, ":utf8");
Will farlo rompere qualcosa in Plack o dei suoi middleware? O è l'unico modo corretto per scrivere app per Plack che codificano/decodificano esplicitamente all'apertura, quindi senza lo open
pragma?
Does Plack scrive in STDOUT o legge da STDIN? Se è così, è quasi sicuramente sbagliato (a meno che non siano anche un bug in Plack). Ho detto "quasi" perché l'uso di 'binmode' in Plack non lo farebbe. PS - ora sai perché non è fatto di default; rompe cose. – ikegami
Sono speranzoso che il guruan di @miyagawa dirà di più .. :) E capisco perché utf8 non è predefinito, ma, (IMO) i nuovi moduli CPAN dovrebbero essere sviluppati con "perl -CSDA" o con 'env PERL_UNICODE' in mente. E miyagawa sicuramente lo usa in ambiente giapponese, quindi, dovrebbe sapere nel modo giusto ..;) – cajwine
Penso che il "modo corretto" che hai elencato sia rotto. 'text/plain' ha bisogno di un charset in modo che l'altra parte sappia cosa rappresentano i byte e come decodificarli. – Ashley