De dónde viene esto: - * - codificación: utf-8 - * -

135

Python reconoce lo siguiente como instrucción que define la codificación del archivo:

# -*- coding: utf-8 -*-

Definitivamente vi este tipo de instrucciones antes ( -*- var: value -*-). ¿De dónde viene? ¿Cuál es la especificación completa, por ejemplo, puede el valor incluir espacios, símbolos especiales, nuevas líneas, incluso a -*-sí mismo?

Mi programa escribirá archivos de texto sin formato y me gustaría incluir algunos metadatos en ellos utilizando este formato.

hamstergene
fuente
3
Esto es más fácil de recordar y funciona en mi editor, PyCharm. # coding: utf-8
crizCraig
2
Usar # coding: utf8trabajos listos para usar con Python 2.7, incluso fuera de PyCharm. (Yo uso SublimeText).
Basj
1
@Cbhihe Esta pregunta no se trata de Python, no se trata de lo que hace la instrucción o cómo funciona. Se pregunta qué software anterior a Python lo inventó y si hay algo más que la codificación de archivos.
hamstergene

Respuestas:

89

Esta forma de especificar la codificación de un archivo Python proviene de PEP 0263 - Definición de codificaciones de código fuente de Python .

GNU Emacs también lo reconoce (consulte la Referencia del lenguaje Python, 2.1.4 Declaraciones de codificación ), aunque no sé si fue el primer programa en utilizar esa sintaxis.

Andrea Spadaccini
fuente
44
Por lo que puedo concluir del manual de Emacs, el valor puede ser cualquier expresión LISP, en particular, una cadena entre comillas dobles
hamstergene
Gracias por el enlace de pep. Antes tenía la impresión de que la directiva solo la usaba el editor de texto. Hasta ahora, nunca supe que el intérprete de Python realmente analizó el comentario si está presente en las dos primeras líneas del archivo.
umeboshi
8

Esto se llama variables locales de archivo, que Emacs entiende y establece de manera correspondiente. Consulte la sección correspondiente en el manual de Emacs : puede definirlos en el encabezado o en el pie de página del archivo

Alex Ott
fuente
El intérprete de Python también entiende este tipo específico de variable local de archivo, no es solo para editores de texto. stackoverflow.com/questions/41680533/…
Boris
4

En PyCharm, lo dejaría fuera. Apaga el indicador UTF-8 en la parte inferior con una advertencia de que la codificación está codificada. No piense que necesita el comentario de PyCharm mencionado anteriormente.

cwp393
fuente
en realidad, si pongo una línea como test1 = 'äöü'esta, te indicará que agregues un encabezado al archivo. (pycharm 2019.1)
Cutton Eye
@Cutton Eye, ¿eso es con Python 2 o 3?
Boris