gpt4 book ai didi

python - Python 3 源文件支持哪些文件编码?

转载 作者:行者123 更新时间:2023-11-28 21:53:31 27 4
gpt4 key购买 nike

在你告诉我阅读之前 PEP 0263 ,继续阅读...

我找不到任何文档详细说明 Python 3 源文件支持哪些文件编码

我发现了数百(数千?)关于如何在源文件的顶部声明该源文件的编码的问题、答案、帖子、电子邮件等,但没有一个能回答我的问题.请耐心等待并想象一下(或实际尝试)以下操作:

  1. 打开记事本(我在 Windows 7 上使用普通的旧记事本,但我怀疑它是否重要;我相信您的高级编辑器可以做类似的事情。)
  2. 键入您最喜欢的 Python 代码行(我使用了 print( 'Hello, world!' ) )
  3. 选择"file"->“保存”
  4. 选择文件夹和文件名(我用的是“E:\Temp\hello.py”)
  5. 将“编码:”设置从默认的“ANSI”更改为“Unicode”
  6. 按“保存”
  7. 打开命令提示符,切换到包含新文件的文件夹,然后尝试运行它

这是我得到的输出:

E:\Temp>python --version
Python 3.4.1

E:\Temp>python "hello.py"
File "hello.py", line 1
SyntaxError: Non-UTF-8 code starting with '\xff' in file hello.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

现在,当我在 Notepad++ 中打开同一个文件时并查看“编码”菜单,它选择了“在 UCS-2 Little Endian 中编码”选项。 Wikipedia tells me这基本上是 UTF-16 编码。任何。我真的不在乎。进一步研究表明,我的编辑器在文件的前面插入了一个值为 '\xff\xfe' 的两个字节的 BOM(字节顺序标记)来指示文件编码。所以至少我知道 Python 提示的 '\xff' 代码从何而来。

所以我去读了PEP 0263 - 以及与它相关的所有其他内容 - 在网络上,我尝试在文件的第一行添加这样的评论

# coding: utf-16

有各种不同的编码值,但没有任何帮助。 但这也无济于事,对吧?因为 Python 甚至没有达到我的编码声明的程度;它被源文件的第一个字节阻塞了!

所以我真正想知道的是...

  1. 为什么 Python 3 解释器不能读取这个文件?
  2. 如果不支持“Unicode”或“UCS-2 Little Endian”或“UTF-16”或任何,那是什么???

附言我什至找到了another question on StackOverflow这似乎是我遇到的确切问题,但它被关闭了——在我看来是错误的——作为重复的。 :(

--- 编辑 ---

有人询问我的“编译选项”。这是一些输出。也许它会有所帮助?

E:\Temp>python
Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 10:38:22) [MSC v.1600 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sysconfig
>>> print( sysconfig.get_config_vars() )
{'EXT_SUFFIX': '.pyd', 'srcdir': 'C:\\Python34', 'py_version_short': '3.4', 'base': 'C:\\Python34', 'prefix': 'C:\\Python34', 'projectbase': 'C:\\Python34', 'INCLUDEPY': 'C:\\Python34\\Include', 'platbase': 'C:\\Python34', 'py_version_nodot': '34', 'exec_prefix': 'C:\\Python34', 'EXE': '.exe', 'installed_base': 'C:\\Python34', 'SO': '.pyd', 'installed_platbase': 'C:\\Python34', 'VERSION': '34', 'BINLIBDEST': 'C:\\Python34\\Lib', 'LIBDEST': 'C:\\Python34\\Lib', 'userbase': 'C:\\Users\\alonghi\\AppData\\Roaming\\Python', 'py_version': '3.4.1', 'abiflags': '', 'BINDIR': 'C:\\Python34'}
>>>

最佳答案

源编码必须是:

  1. 相关 Python 版本支持的编码。 (这因版本和平台而异,例如,您只能在 Windows 上获得 mbcs。)

  2. 松散的 ASCII 兼容,足以使 # coding: 声明可以使用 ascii 读取,它是读取任何声明之前的初始源代码编码。请参阅 PEP0263“概念”第 1 项。

Windows 误称为“Unicode”的编码 UTF-16LE 与 ASCII 不兼容(通常是您应该尽量避免使用的一大堆问题)。 Python 需要特殊的编码特定支持来检测 UTF-16 源文件,此功能已被 declined现在。

您应该使用的 # 编码: 几乎总是 UTF-8。

关于python - Python 3 源文件支持哪些文件编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26132121/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com