你去告诉我读PEP 0263之前,请继续阅读...Python 3源文件支持哪些文件编码?
我无法找到细节的文件编码都支持Python 3的源文件任何文件。
我发现了数百(数千?)个问题,答案,帖子,电子邮件等,关于如何声明 - 在源文件的顶部 - 该源文件的编码,但它们都不回答我的问题题。多多包涵,想象做(或实际尝试)以下:
- 打开记事本(我使用的是Windows 7的普通的旧记事本,但我怀疑它的事项,我敢肯定,你的上级编辑器可以做一些事情。类似)
- 输入自己喜欢的Python代码(我用
print('Hello, world!')
) - 选择 “文件” 行 - > “保存”
- 选择一个文件夹和文件名(我用“E:\ TEMP \打招呼。 py“)
- 将”Encoding:“设置从默认的”ANSI“更改为”Unicode“
- 按“保存”
- 打开命令提示符窗口,切换到文件夹包含您的新文件,并尝试运行它
这里的输出我得到:
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编码。随你。我真的不在乎。更多的研究表明,我的编辑器在文件的前面插入了一个两字节BOM(字节顺序标记),其值为'\ xff \ xfe'以指示文件编码。所以至少我知道Python抱怨的'\ xff'代码来自哪里。
所以我去阅读PEP 0263 - 和一切关于它 - 在网络上,我尝试添加注释这样的文件
# coding: utf-16
与所有种类的不同值的第一线编码,并没有什么帮助。 但它不能帮助,对不对?因为Python甚至没有我的编码声明;它窒息了源文件的第一个字节!
所以我真正想知道的是......
- 为什么不能Python的3解释读取这个文件?
- 如果不支持“Unicode”或“UCS-2 Little Endian”或“UTF-16”或不管是什么?
P.S.我甚至发现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'}
>>>
你可以从上到下发布你的整个hello.py文件,包括“shebang”'#!/ bin/env python'或其他东西。另外,你编译的选项可能会有所帮助:'import sysconfig; print(sysconfig.get_config_vars())' – jedwards 2014-10-01 00:13:50
@jedwards该文件包含一行代码,如上所述。 – aldo 2014-10-01 00:25:39
@also,谢谢你的“澄清”,但它没有什么帮助。这就是说,也许咨询[this](https://docs.python.org/2/library/codecs.html#standard-encodings)。我不知道它是否是你感兴趣的列表,但似乎是可行的。祝你的问题... – jedwards 2014-10-01 00:30:35