PEP 263 define cómo declarar la codificación del código fuente de Python.
Normalmente, las primeras 2 líneas de un archivo Python deberían comenzar con:
#!/usr/bin/python
# -*- coding: <encoding name> -*-
Pero he visto muchos archivos que comienzan con:
#!/usr/bin/python
# -*- encoding: <encoding name> -*-
=> codificación en lugar de codificación .
Entonces, ¿cuál es la forma correcta de declarar la codificación del archivo?
¿Se permite la codificación porque la expresión regular utilizada es perezosa? ¿O es simplemente otra forma de declarar la codificación del archivo?
Estoy haciendo esta pregunta porque el PEP no habla de codificación , solo habla de codificación .
#!/usr/bin/env python
lugar de#!/usr/bin/python
ascii
aUTF-8
. Compare: documentos de python 2.7 con documentos de python 3.7 . Esto significa que puede omitir esta codificación de forma segura si desea especificarUTF-8
.Respuestas:
Consulta los documentos aquí :
"Si un comentario en la primera o segunda línea del script de Python coincide con la expresión regular
coding[=:]\s*([-\w.]+)
, este comentario se procesa como una declaración de codificación""Las formas recomendadas de esta expresión son
que también es reconocido por GNU Emacs, y
que es reconocido por VIM de Bram Moolenaar ".
Por lo tanto, puede poner casi cualquier cosa antes de la parte de "codificación", pero manténgase en "codificación" (sin prefijo) si desea ser 100% compatible con python-docs-advice.
Más específicamente, debe usar lo que sea reconocido por Python y el software de edición específico que use (si necesita / acepta algo). Por ejemplo,
coding
GNU Emacs reconoce la forma (fuera de la caja) pero no Vim (sí, sin un acuerdo universal, es esencialmente una guerra territorial ).fuente
-*-
?-*-
asegura que la línea sea reconocida por GNU Emacs (un editor de texto popular entre algunos programadores). Tenga en cuenta que, contrariamente a esta respuesta, tanto el formulario Emacs como el formulario Vim son 100% compatibles con python-docs-recomendación (ya que ambos coinciden con la expresión regular - "coincidencia", por convención de larga data, significa "coincidencia en cualquier lugar del cadena ", contrario a la API de Python).<prefix>-*- var: value[; ...] -*-
.PEP 263:
Entonces, "en coding: UTF-8 " coincide.
PEP proporciona algunos ejemplos:
fuente
Simplemente copie la siguiente instrucción pegar en la parte superior de su programa. Resolverá los problemas de codificación de caracteres
fuente
A partir de hoy - junio de 2018
El PEP 263 mismo menciona la expresión regular que sigue:
Entonces, como ya lo resumieron otras respuestas, coincidirá
coding
con cualquier prefijo, pero si desea cumplir con la PEP lo más posible (aunque, por lo que puedo decir, usar enencoding
lugar decoding
no viola PEP 263 de cualquier manera): quédese con 'simple'coding
, sin prefijos.fuente
Si no me equivoco, la propuesta original para las codificaciones del archivo fuente era usar una expresión regular para el primer par de líneas, lo que permitiría ambas.
Creo que la expresión regular fue algo en la línea de
coding:
seguido por algo.Encontré esto: http://www.python.org/dev/peps/pep-0263/ Cuál es la propuesta original, pero parece que no puedo encontrar la especificación final que indique exactamente lo que hicieron.
Ciertamente he usado
encoding:
un gran efecto, así que obviamente eso funciona.Intente cambiar a algo completamente diferente, como
duhcoding: ...
para ver si eso funciona igual de bien.fuente
Sospecho que es similar a Ruby: cualquier método está bien.
Esto se debe principalmente a que diferentes editores de texto usan diferentes métodos (es decir, estos dos) para marcar la codificación.
Con Ruby, siempre que el primero o el segundo si hay una línea shebang contenga una cadena que coincida con:
e ignorando cualquier espacio en blanco y otras pelusas en esas líneas. (A menudo puede ser a = en lugar de: también).
fuente