¿Debo usar la declaración de codificación en Python 3?

114

Python 3 usa codificación UTF-8 para archivos de código fuente de forma predeterminada. ¿Debo seguir usando la declaración de codificación al principio de cada archivo fuente? Me gusta# -*- coding: utf-8 -*-

Mateusz Jagiełło
fuente

Respuestas:

112

Debido a que el valor predeterminado es UTF-8, solo necesita usar esa declaración cuando se desvía del predeterminado o si confía en otras herramientas (como su IDE o editor de texto) para hacer uso de esa información.

En otras palabras, en lo que respecta a Python , solo cuando desee utilizar una codificación diferente, deberá utilizar esa declaración.

Otras herramientas, como su editor, pueden admitir una sintaxis similar, por lo que la especificación PEP 263 permite una flexibilidad considerable en la sintaxis (debe ser un comentario, el texto codingdebe estar allí, seguido de un carácter :o =y un espacio en blanco opcional, seguido de un códec reconocido).

Tenga en cuenta que solo se aplica a la forma en que Python lee el código fuente . No se aplica a la ejecución de ese código, por lo tanto, no a cómo la impresión, la apertura de archivos o cualquier otra operación de E / S se traduce entre bytes y Unicode. Para obtener más detalles sobre Python, Unicode y codificaciones, le recomiendo encarecidamente que lea el CÓMO de Python Unicode , o la charla pragmática sobre Unicode muy completa de Ned Batchelder.

Martijn Pieters
fuente
28
El # -*- coding: utf-8 -*-todavía puede ser útil para algunos editores para cambiar a la codificación de espera al editar el archivo de origen.
pepr
1
@pepr Una marca de orden de bytes podría hacer lo mismo, ¿no?
endolito
12
@endolith: la lista de materiales de UTF-8 es una abominación en esta tierra presentada por Microsoft. Consulte en.wikipedia.org/wiki/Byte_order_mark#UTF-8
Martijn Pieters
1
@MartijnPieters Su enlace no parece estar de acuerdo con usted
endolith
2
@endolith: no, el artículo de WP solo resume los antecedentes, es mi propia opinión que es una abominación. El objetivo de una lista de materiales es registrar el orden de bytes (de ahí el nombre, marca de orden de bytes). No hay confusión de orden de bytes en UTF-8, solo tiene esa función en UTF-16 y UTF-32. El valor ya es un carácter de espacio sin interrupción de ancho cero reutilizado (útil, ya que la impresión accidental luego termina con una salida completamente invisible), reutilizarlo para que sea una constante mágica es incorrecto, en mi opinión.
Martijn Pieters
6

No, si:

  • todo el proyecto usa solo el UTF-8, que es un valor predeterminado.
  • y está seguro de que su herramienta IDE no necesita esa declaración de codificación en cada archivo.

Si si

  • su proyecto se basa en diferentes codificaciones
  • o se basa en muchas codificaciones.

Para proyectos de codificación múltiple:

Si algunos archivos están codificados en non-utf-8, incluso para estos codificados, UTF-8también debe agregar la declaración de codificación, porque la regla de oro esExplicit is better than implicit.

Referencia:

  • PyCharm no necesita esa declaración:

configurar la codificación para un archivo específico en pycharm

  • vim no necesita esa declaración, pero:
# vim: set fileencoding=<encoding name> :
Sławomir Lenart
fuente