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

2025-01-08 08:50:00
admin
原创
206
摘要:问题描述: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大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2525  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1542  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Filestage、Xebrio、Kintone、Monday、Celoxis、Backlog、BubblePPM、Plutio、Scoro。在当今快速变化的商业环境中,项目管理系统的选择成为企业成功的关键因素之一。许多企业在选购项目管理系统时,常常面临功能复杂、...
项目管理系统   0  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Plutio、Kantata、Kintone、LiquidPlanner、Motion、Smartsheet、Targa、QuickBase、Hive。在当今快节奏的商业环境中,项目管理软件已成为企业提升效率、优化资源分配和确保项目按时交付的关键工具。然而,面对市...
开源项目管理软件   15  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Scoro、Wekan、Hubstaff、Kintone、Wrike、Filestage、Trello、Airtable、Paymo。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时常常面临诸多挑战,如任务分...
项目管理系统   7  
热门文章
项目管理软件有哪些?
曾咪二维码

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

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

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用