定义 Python 源代码编码的正确方法

2025-01-08 08:50:00
admin
原创
203
摘要:问题描述:PEP 263定义了如何声明 Python 源代码编码。通​​常,Python 文件的前两行应该以以下内容开头:#!/usr/bin/python # -*- coding: <encoding name> -*- 但是我看到很多文件以以下内容开头:#!/usr/bin/python #...

问题描述:

PEP 263定义了如何声明 Python 源代码编码。通​​常,Python 文件的前两行应该以以下内容开头:

#!/usr/bin/python
# -*- coding: <encoding name> -*-

但是我看到很多文件以以下内容开头:

#!/usr/bin/python
# -*- encoding: <encoding name> -*-

即,它说的encoding是而不是coding

文件编码该如何声明?


尝试在 Python 脚本中使用非 ASCII 文本时,请使用“SyntaxError:非 ASCII 字符 ...”或“SyntaxError:以 ... 开头的非 UTF-8 代码”来关闭有关因缺少或错误编码声明而导致的语法错误的重复问题。另一方面,这个问题是关于如何编写声明以及是否有必要的问题的典型问题。


解决方案 1:

在此处查看文档:

“如果 Python 脚本第一行或第二行的注释与正则表达式匹配coding[=:]s*([-w.]+),则该注释将被视为编码声明”

“此表达式的推荐形式为

# -*- coding: <encoding-name> -*-

GNU Emacs 也认可这一点,并且

# vim:fileencoding=<encoding-name>

它被 Bram Moolenaar 的 VIM 所识别。”

因此,您可以在“编码”部分之前放置任何内容,但如果您想要 100% 兼容 python-docs-recommendation,请坚持使用“编码”(没有前缀)。

更具体地说,您需要使用 Python和您使用的特定编辑软件所识别的任何内容(如果它需要/接受任何东西)。例如,codingGNU Emacs 可以识别(开箱即用)该表单,但 Vim 无法识别(是的,如果没有一个普遍的协议,这本质上就是一场地盘之争)。

解决方案 2:

PEP 263:

第一行或第二行必须匹配正则表达式“coding[:=]\s*([-\w.]+)”

因此,“en encoding: UTF-8 ”匹配。

PEP 提供了一些示例:

#!/usr/bin/python
# vim: set fileencoding=<encoding name> :

 

# This Python file uses the following encoding: utf-8
import os, sys

解决方案 3:

只需将下面的语句复制粘贴到程序顶部即可解决字符编码问题

#!/usr/bin/env python
# -*- coding: utf-8 -*-

解决方案 4:

截至今日——2018 年 6 月


PEP 263本身提到了它所遵循的正则表达式:

要定义源代码编码,必须将魔术注释放入源文件中,作为文件的第一行或第二行,例如:

# coding=<encoding name>

或(使用流行编辑器识别的格式):

#!/usr/bin/python
# -*- coding: <encoding name> -*-

或者:

#!/usr/bin/python
# vim: set fileencoding=<encoding name> : 

更准确地说,第一行或第二行必须与以下正则表达式匹配:

^[     ]*#.*?coding[:=][     ]*([-_.a-zA-Z0-9]+)

因此,正如其他答案已经总结的那样,它会coding与任何前缀匹配,但如果你想尽可能地符合 PEP 标准(尽管据我所知,使用encodingcoding不是不会以任何方式违反 PEP 263) - 坚持使用 'plain' coding,不带前缀。

解决方案 5:

我认为它与 Ruby 类似——两种方法都可以。

这主要是因为不同的文本编辑器使用不同的方法(即这两种)来标记编码。

使用 Ruby,只要第一行或第二行如果有一个 shebang 包含匹配的字符串:

coding: encoding-name

并忽略这些行上的任何空格和其他无用信息。(通常也可以用 = 代替 :)。

解决方案 6:

如果我没记错的话,源文件编码的原始提议是对前几行使用正则表达式,这样可以同时允许两者。

我认为正则表达式类似于后面coding:跟着一些东西。

我发现了这个: http: //www.python.org/dev/peps/pep-0263/
这是最初的提案,但我似乎找不到最终的规范来确切说明他们做了什么。

我确实使用过,encoding:效果非常好,所以显然它有效。

尝试改变一些完全不同的东西,看看duhcoding: ...是否同样有效。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2500  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1541  
  PLM(产品生命周期管理)项目对于企业优化产品研发流程、提升产品质量以及增强市场竞争力具有至关重要的意义。然而,在项目推进过程中,范围蔓延是一个常见且棘手的问题,它可能导致项目进度延迟、成本超支以及质量下降等一系列不良后果。因此,有效避免PLM项目范围蔓延成为项目成功的关键因素之一。以下将详细阐述三大管控策略,助力企业...
plm系统   16  
  PLM(产品生命周期管理)项目管理在企业产品研发与管理过程中扮演着至关重要的角色。随着市场竞争的加剧和产品复杂度的提升,PLM项目面临着诸多风险。准确量化风险优先级并采取有效措施应对,是确保项目成功的关键。五维评估矩阵作为一种有效的风险评估工具,能帮助项目管理者全面、系统地评估风险,为决策提供有力支持。五维评估矩阵概述...
免费plm软件   23  
  引言PLM(产品生命周期管理)开发流程对于企业产品的全生命周期管控至关重要。它涵盖了从产品概念设计到退役的各个阶段,直接影响着产品质量、开发周期以及企业的市场竞争力。在当今快速发展的科技环境下,客户对产品质量的要求日益提高,市场竞争也愈发激烈,这就使得优化PLM开发流程成为企业的必然选择。缺陷管理工具和六西格玛方法作为...
plm产品全生命周期管理   26  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用