POD2-IT
view release on metacpan or search on metacpan
IT/perlunicode.pod view on Meta::CPAN
La gestione di Unicode su piattaforme EBCDIC E<egrave> ancora
sperimentale. Su tali piattaforme, i rifermenti alla codifica UTF-8 in
questo e altri documenti dovrebbero essere intesi come a indicare
UTF-EBCDIC, specificato dal rapporto tecnico Unicode 16, tranne nel
caso in cui si stiano proprio discutendo le differenze tra ASCII e
EBCDIC. Non esiste nE<eacute> una direttiva C<utfebcdic> nE<eacute>
uno strato C<:utfebcdic>; al loro posto, C<utf8> e C<:utf8> vengono
usati per indicare la codifica a 8 bit "nativa" della piattaforma per
Unicode. Leggete L<perlebcdic> per una discussione piE<ugrave>
approfondita della questione.
=head2 "Locale"
Normalmente le impostazione di "locale" e Unicode non si influenzano a
vicenda, ma ci sono un paio di eccezioni:
=over 4
=item *
Potete abilitare l'interpretazione automatica in UTF-8 dei filehandle
standard e di C<@ARGV>, e l'uso di UTF-8 come strato implicito nelle
C<open()>, fornendo il parametro a linea di comando C<-C> o la
variabile d'ambiente C<PERL_UNICODE>; leggete L<perlrun> per la
documentazione del parametro C<-C>.
=item *
Perl cerca con tutte le sue forze di lavorare sia con Unicode sia col
vecchio mondo a byte. Molto spesso questo E<egrave> comodo, ma certe volte
tenere cosE<igrave> "il piede in due staffe" puE<ograve> causare problemi.
=back
=head2 Quando Unicode non viene usato
Sebbene Perl abbia molti modi per gestire l'input e l'output in
Unicode, e i vari altri "punti di ingresso dati" come C<@ARGV> che
possono essere interpretati come Unicode (UTF-8), restano comunque
molti casi in cui Unicode (in una qualche codifica) potrebbe essere
fornito come parametro o ricevuto come risultato, ma non viene usato.
L'elenco seguente contiene tali interfacce. Per ciascuna di esse Perl
al momento (versione 5.8.3) si limita ad assumere che sia i parametri
che i risultati siano stringhe di byte, o stringhe UTF-8 se E<egrave>
stata usata la direttiva C<encoding>.
Una delle ragioni per cui Perl non tenta di risolvere il ruolo di
Unicode in questi casi E<egrave> che le risposte dipendono fortemente
dal sistema operativo e dal file system. Ad esempio, il fatto che i
nomi di file possano essere Unicode, e in quale particolare codifica,
non E<egrave> un concetto proprio portabile. Allo stesso modo per
C<qx> e C<system>: come viene gestito Unicode dall'"interfaccia a riga
di comando"? (e di quale interfaccia si tratta?).
=over 4
=item *
C<chdir>, C<chmod>, C<chown>, C<chroot>, C<exec>, C<link>, C<lstat>,
C<mkdir>, C<rename>, C<rmdir>, C<stat>, C<symlink>, C<truncate>,
C<unlink>, C<utime>, C<-X>
=item *
C<%ENV>
=item *
C<glob> (ovvero C<< <*> >>)
=item *
C<open>, C<opendir>, C<sysopen>
=item *
C<qx> (ovvero l'operatore C<``>), C<system>
=item *
C<readdir>, C<readlink>
=back
=head2 Forzare Unicode in Perl (o forzare non-Unicode)
In alcuni casi (vedi L</"Quando Unicode non viene usato">) dovete
proprio convincere Perl che una stringa di byte E<egrave> in UTF-8, o
viceversa. Le chiamate di basso livello C<utf8::upgrade($bytestring)>
e C<utf8::downgrade($utf8string)> sono la risposta.
Non usatele senza pensarci, perE<ograve>: Perl puE<ograve>
confondersi, arabbiarsi o dare errori fatali se cambiate al volo la
"natura" degli scalari a quel modo. Dovete stare particolarmente
attenti se usate C<utf8::upgrade()>: una stringa di byte a caso non
E<egrave>, in generale, UTF-8 valido.
=head2 Uso di Unicode con XS
Se volete maneggiare dati Perl in Unicode nelle vostre estensioni XS,
potreste trovare utili le seguenti funzioni della API C. Leggete
L<perlguts/"Supporto Unicode"> per una spiegazione di Unicode a
livello XS, e L<perlapi> per i dettagli della API.
=over 4
=item *
C<DO_UTF8(sv)> restituisce true se il flag C<UTF8> E<egrave> attivo e
la direttiva C<bytes> non E<egrave> in uso. C<SvUTF8(sv)> restituisce
true se il flag C<UTF8> E<egrave> attivo, senza tener conto della
direttiva C<bytes>. Il fatto che il flag C<UTF8> sia attivo B<non>
indica che lo scalare contenga caratteri con code point maggiori di
255 (o 127), e neppure che ci siano prorio caratteri. Il significato
del flag C<UTF8> E<egrave> che la sequenza di ottetti nella
rappresentazione dello scalare E<egrave> la sequenza codificata in
UTF-8 dei code point dei caratteri di una stringa. Il fatto che il
flag C<UTF8> sia a zero significa che ciascun ottetto in questa
rappresentazione codifica un solo carattere con code point tra 0 e 255
( run in 0.806 second using v1.01-cache-2.11-cpan-5511b514fd6 )