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

2025-01-08 08:50:00
admin
原创
24
摘要:问题描述: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: ...是否同样有效。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   984  
  在项目管理领域,CDCP(Certified Data Center Professional)认证评审是一个至关重要的环节,它不仅验证了项目团队的专业能力,还直接关系到项目的成功与否。在这一评审过程中,沟通技巧的运用至关重要。有效的沟通不仅能够确保信息的准确传递,还能增强团队协作,提升评审效率。本文将深入探讨CDCP...
华为IPD流程   0  
  IPD(Integrated Product Development,集成产品开发)是一种以客户需求为核心、跨部门协同的产品开发模式,旨在通过高效的资源整合和流程优化,提升产品开发的成功率和市场竞争力。在IPD培训课程中,掌握关键成功因素是确保团队能够有效实施这一模式的核心。以下将从五个关键成功因素展开讨论,帮助企业和...
IPD项目流程图   0  
  华为IPD(Integrated Product Development,集成产品开发)流程是华为公司在其全球化进程中逐步构建和完善的一套高效产品开发管理体系。这一流程不仅帮助华为在技术创新和产品交付上实现了质的飞跃,还为其在全球市场中赢得了显著的竞争优势。IPD的核心在于通过跨部门协作、阶段性评审和市场需求驱动,确保...
华为IPD   0  
  华为作为全球领先的通信技术解决方案提供商,其成功的背后离不开一套成熟的管理体系——集成产品开发(IPD)。IPD不仅是一种产品开发流程,更是一种系统化的管理思想,它通过跨职能团队的协作、阶段评审机制和市场需求驱动的开发模式,帮助华为在全球市场中脱颖而出。从最初的国内市场到如今的全球化布局,华为的IPD体系在多个领域展现...
IPD管理流程   0  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用