Dovrei usare la dichiarazione di codifica in Python 3?


114

Python 3 utilizza la codifica UTF-8 per i file del codice sorgente per impostazione predefinita. Devo comunque usare la dichiarazione di codifica all'inizio di ogni file sorgente? Piace# -*- coding: utf-8 -*-

Risposte:


112

Poiché l'impostazione predefinita è UTF-8, è necessario utilizzare quella dichiarazione solo quando si devia da quella predefinita o se si fa affidamento su altri strumenti (come l'IDE o l'editor di testo) per utilizzare tali informazioni.

In altre parole, per quanto riguarda Python , solo quando vuoi usare una codifica diversa devi usare quella dichiarazione.

Altri strumenti, come il tuo editor, possono supportare una sintassi simile, motivo per cui la specifica PEP 263 consente una notevole flessibilità nella sintassi (deve essere un commento, il testo codingdeve essere lì, seguito da un carattere :o =e uno spazio bianco opzionale, seguito da un codec riconosciuto).

Nota che si applica solo al modo in cui Python legge il codice sorgente . Non si applica all'esecuzione di quel codice, quindi non al modo in cui la stampa, l'apertura di file o qualsiasi altra operazione di I / O si traducono tra byte e Unicode. Per maggiori dettagli su Python, Unicode e le codifiche, vi invito caldamente a leggere il Python Unicode HOWTO , o l'approfondito discorso Pragmatic Unicode di Ned Batchelder.


28
Il # -*- coding: utf-8 -*-può ancora essere utile per alcuni editor per passare al previsto codificante durante la modifica del file di origine.
pepr

1
@pepr A Byte Order Mark potrebbe fare lo stesso, no?
endolith

12
@endolith: l'UTF-8 BOM è un abominio su questa terra portato avanti da Microsoft .. Vedi en.wikipedia.org/wiki/Byte_order_mark#UTF-8
Martijn Pieters

1
@MartijnPieters Il tuo link non sembra essere d'accordo con te
endolith

2
@endolith: no, l'articolo di WP riassume solo i retroscena, è mia opinione che sia un abominio. Lo scopo di una distinta materiali è registrare l'ordine dei byte (da cui il nome, Byte Order Mark). Non c'è confusione nell'ordine dei byte in UTF-8, ha solo quella funzione in UTF-16 e UTF-32. Il valore è già un carattere di spazio senza interruzioni di larghezza zero riproposto (utile, poiché la stampa accidentale finisce quindi con un output completamente invisibile), riutilizzarlo per essere una costante magica è sbagliato, a mio avviso.
Martijn Pieters

6

No, se:

  • l'intero progetto usa solo UTF-8, che è un'impostazione predefinita.
  • e sei sicuro che il tuo strumento IDE non abbia bisogno di quella dichiarazione di codifica in ogni file.

Si se

  • il tuo progetto si basa su una codifica diversa
  • o si basa su molte codifiche.

Per progetti multi-codifiche:

Se alcuni file sono codificati in non-utf-8, allora anche per questi codificati UTF-8dovresti aggiungere anche la dichiarazione di codifica, perché la regola d'oro èExplicit is better than implicit.

Riferimento:

  • PyCharm non ha bisogno di quella dichiarazione:

configurazione della codifica per un file specifico in pycharm

  • vim non ha bisogno di quella dichiarazione, ma:
# vim: set fileencoding=<encoding name> :
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.