你去告訴我讀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