Hel*_*rld 10 python windows utf-8 latin1
就我而言,我将Python嵌入到我的应用程序中.当我的应用程序的路径包含非latin-1字符时,Py_Initialize在内部调用exit(1)(稍后会有更多信息).
所以我检查了是否可以使用标准解释器可执行文件重现这一点.
当PYTHONHOME的路径包含latin-1字符集之外的字符时,Windows上的Python-2.7.x似乎不起作用.问题是无法找到并导入模块站点.由于变音符号似乎有效,这里的实际限制是什么?只支持latin-1吗?那为什么它适用于OSX呢?
C:\Users\?\Python27\python.exe // fails to start (KOI8-R)
^
C:\Users\?\Python27\python.exe // fails to start (latin-3)
^
C:\Users\ä\Python27\python.exe // works fine (latin-1)
^
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
背景:
我还没有完成代码,但是当站点不可用时,Python 2.6和Python 2.7的行为也不同.Py 2.6只打印一条消息,Py 2.7拒绝启动.
static void
initsite(void)
{
PyObject *m;
m = PyImport_ImportModule("site");
if (m == NULL) {
...
// Python 2.7 and later
exit(1);
// Python 2.6 and prior
PyFile_WriteString("'import site' failed; traceback:\n", f);
}
...
}
Run Code Online (Sandbox Code Playgroud)
Python 2.7:https://github.com/enthought/Python-2.7.3/blob/master/Python/pythonrun.c#L725
Python 2.6:https://github.com/python-git/python/blob/master/Python/pythonrun.c#L705
我认为问题在于,Python2 在内部将所有内容处理为平台系统编码中的字节字符串,该平台系统编码(在西欧)CP1252 是 Latin-1 的变体。因此,它无法正确处理包含其他字符的 PYTHONHOME 路径也就不足为奇了
但是,当我年轻的时候,我习惯了 MS/DOS 文件的旧 8.3 格式......
我仍然可以在 Windows 7 框中的DIR /X 控制台 (CMD.EXE) 窗口中查看(并使用它们)。此格式仅使用 ASCII 大写字符和 tilda ( ~),因此它可以用作解决方法:只需在环境变量 PYTHONHOME 中声明 8.3 路径,并使用该 8.3 路径启动 python。
顺便说一句,建议 PYTHONHOME 使用既不包含特殊字符也不包含空格的路径。它可以工作,但可能会导致其他模块出现问题
| 归档时间: |
|
| 查看次数: |
344 次 |
| 最近记录: |