Che cosa fa il modulo Python Codecs?

2

Ho appena letto la documentazione sul modulo Codecs, ma suppongo che la mia conoscenza / esperienza di comp sci non sia ancora abbastanza profonda da consentirmi di comprenderla.

È per gestire la codifica / decodifica, in particolare Unicode, e mentre per molti di voi è una spiegazione completa e perfetta, per me è veramente vago. Non capisco davvero cosa significhi affatto. Il testo è testo è testo in un file .txt? O così questo pensiero dilettante.

Qualcuno può spiegare?

    
posta temporary_user_name 12.10.2012 - 12:14
fonte

2 risposte

4

Avendo capito perché Unicode è necessario (lettura consigliata: link , link : grazie a @DanielB per gli eccellenti link) e che codifiche dei caratteri sono i computer utilizzare per rappresentare i personaggi del mondo reale, diventa chiaro che quando Python sta leggendo o scrivendo byte che rappresentano il testo da un flusso (che può essere un file, una pipe, un socket, ...), ha bisogno di sapere quale codifica dei caratteri è in corso usato in modo che quei byte siano significativi come testo leggibile dall'uomo.

Python utilizza ascii come codifica predefinita. La codifica ascii è inadeguata per quasi tutte le lingue (compreso l'inglese: non c'è £ in ascii !): Quindi devi specificare una codifica alternativa quando scrivi a stream se intendi utilizzare qualsiasi carattere non parte di% % co_de.

Durante la lettura dai flussi, è necessario sapere quale codifica è stata utilizzata per scrivere nello stream e utilizzare la stessa codifica per leggerla, altrimenti il risultato decodificato sarà errato. Prova a scrivere una stringa con caratteri cirillici con il codec ascii e rileggila con il codec ISO-8859-5 : vedrai che non corrispondono, perché sequenze di byte diverse significano caratteri diversi nelle due codifiche.

Quindi, per rispondere alla tua domanda specifica,

out_file = open('example.txt', 'w')

in realtà sta aprendo il file per la scrittura usando implicitamente il codec UTF-8 . Se vuoi specificare un altro codec, devi utilizzare il parametro ascii della funzione encoding in Python 3.x :

out_file = open('example.txt', 'a', 'utf-8')

o se stai ancora utilizzando Python 2.x (l'ultimo è Python 2.7.3 al momento della stesura di questo documento), è necessario utilizzare le funzioni dal codec modulo:

out_file = codecs.open('example.txt', 'a', 'utf-8')

poiché open in Python 2.x non consente di specificare una codifica ( puoi usarlo per leggere il flusso di byte in una stringa di byte in memoria, e poi decodificare quella stringa).

    
risposta data 12.10.2012 - 13:55
fonte
0

Dai un'occhiata a Dive Into Python 3 di Mark Pilgrim, Capitolo 4. Stringhe . È per Python 3 - il capitolo spiega qual è la differenza tra la sequenza di byte e le stringhe astratte (testo).

La documentazione di codecs riguarda le stesse cose. Ma la spiegazione nel capitolo è più comprensibile per i nuovi arrivati.

    
risposta data 12.10.2012 - 22:39
fonte

Leggi altre domande sui tag