我已經開始慢慢涉足Python/C API,並且經過大量的擺弄和討論後,我能夠構建spam.pyd文件。導入.pyd文件時的UnicodeDecodeError
但是,我必須在這個過程中失去一些東西,並希望有人能指出我在正確的方向。我認爲一旦創建了spam.pyd,我就可以通過導入垃圾郵件從Python調用它。這是真的?
當我嘗試,我得到了以下跟蹤:
Traceback (most recent call last):
File "< pyshell#25 >", line 1, in <module>
import spam
UnicodeDecodeError: 'utf8' codec can't decode byte 0x89 in position 1: unexpected code byte
任何想法,我做錯了什麼?我正在使用Windows XP上的Python 3.1.2。我通過mingw32編譯器編譯spam.c。
感謝您閱讀本文!
編輯:
嗯,它看起來像問題是,我已經在使用ANSI編碼保存文件的編輯器編寫的C代碼。奇怪的是,如果我在記事本中重新輸入了代碼,並且使用UTF8編碼保存了該文件,那麼編譯時錯誤會抱怨無效字符。當我使用內置的IDLE編輯器時,一切正常。我只是遵循Python教程here的示例。
這是一個常見的問題有嗎?
這裏是已使用的所有代碼,如果它可以幫助任何:
#include <Python.h>
static PyObject *spam_system(PyObject *self, PyObject *args)
{
const char *command;
int sts;
if (!PyArg_ParseTuple(args, "s", &command))
return NULL;
sts = system(command);
return Py_BuildValue("i", sts);
}
static PyMethodDef SpamMethods[] = {
{"system", spam_system, METH_VARARGS,
"Execute a shell command."},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef spammodule = {
PyModuleDef_HEAD_INIT,
"spam",
NULL,
-1,
SpamMethods
};
PyMODINIT_FUNC
PyInit_spam(void)
{
return PyModule_Create(&spammodule);
}
那麼,你最好向我們展示spam.c的[相關部分]來源。這是你用C編寫的第一個Python擴展模塊嗎?你正在學什麼教科書或教程? – 2010-08-21 06:06:07
是的,這是我第一次編寫Python擴展模塊。我只是按照Python網站上的教程。我用更多(有希望的)相關信息更新了我的問題。 – 2010-08-21 19:50:46