2009-12-03 5 views
5

In precedenza avevo solo una vaga consapevolezza dei problemi di codifica dei caratteri, ma answers to a question today mi ha fatto riflettere. Il seguente più cibo fornito per la mente troppo:La codifica dei caratteri espliciti e la codifica/decodifica devono essere promossi come "best practice" in Perl?

perlunitut - Perl Unicode Tutorial

perlunifaq - Perl Unicode FAQ

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

L'unico posto che ho visto menzione di affermare l'codifica dei caratteri (ad es use utf8; per la maggior parte di noi) del nostro codice sorgente come "best practice" era nelle risposte al già citato question.

Inoltre, perlunitut menziona che dovremmo use Encode qw{encode decode}; nella nostra "intestazione standard" nei programmi Perl. Sembra quindi che un'altra "best practice" dovrebbe essere la decodifica di tutti gli input e la codifica di tutti gli output.

Cosa ne pensi?

risposta

14

use utf8 ha davvero poco a che fare con esso - quasi nessuno usa identificatori unicode, e un programma può facilmente essere compatibile con la codifica senza includere mai le stringhe di stringa UTF-8 nel codice.

Ma sì, la migliore saggezza che io conosca per trattare con codifiche è questo:

  • sapere sempre dove i dati proviene e come è formattato, e decodificare il più presto possibile (a meno che sia destinato a essere elaborato come byte).
  • Comprendi sempre il formato dei dati in cui stai scrivendo o quello che il tuo cliente si aspetta e codifica in uscita (a meno che i tuoi dati non siano già byte).
  • E quando si parla di testo, lavorare sempre con le stringhe di caratteri nell '"interno" del programma.

L'esistenza stessa di un milione di set di caratteri diversi e un milione di differenti codifiche dovrebbe essere un dettaglio del dell'interfaccia il più possibile. Ci sono alcune cose che devi ancora tenere a mente - ad esempio diverse regole di confronto per lingue diverse - ma è comunque un ideale da perseguire, e seguirlo il più lontano possibile dovrebbe ridurre notevolmente il numero di "problemi di codifica" nel tuo codice.

Per rispondere alla tua domanda più direttamente, sì - se stai leggendo dati testuali dall'esterno senza decodifica, o inviando dati ovunque senza codifica, c'è una buona possibilità che tu stia commettendo un errore e che il tuo codice si interromperà quando qualcun altro lo usa in una localizzazione diversa dalla tua.

+0

Grazie per la risposta. Mi sto chiedendo cosa intendessi per "interno" del tuo programma ". –

+0

Intendo la logica di base del programma - tutto ciò che effettivamente fa qualunque sia il tuo programma o la tua libreria, al contrario delle parti che parlano al mondo esterno. – hobbs

Problemi correlati