gpt4 book ai didi

python - 导入 .pyd 文件时出现 UnicodeDecodeError

转载 作者:行者123 更新时间:2023-12-01 06:15:26 25 4
gpt4 key购买 nike

我开始慢慢涉足 Python/C API,经过大量摆弄和欺骗,我能够构建一个 spam.pyd 文件。

但是,我一定在这个过程中遗漏了一些东西,并希望有人能给我指出正确的方向。我认为一旦创建了 spam.pyd,我就可以通过 import spam 从 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

静态 PyObject *spam_system(PyObject *self, PyObject *args)
{
const char *命令;
int sts;
if (!PyArg_ParseTuple(args, "s", &command))
返回空值;
sts = 系统(命令);
返回 Py_BuildValue("i", sts);
}

静态 PyMethodDef SpamMethods[] = {
{“系统”,spam_system,METH_VARARGS,
“执行 shell 命令。”},
{空,空,0,空}
};

静态结构 PyModuleDef spammodule = {
PyModuleDef_HEAD_INIT,
“垃圾邮件”,
无效的,
-1,
垃圾邮件方法
};

PyMODINIT_FUNC
PyInit_spam(无效)
{
返回 PyModule_Create(&spammodule);
}

最佳答案

你说:嗯,看起来问题是我在用 ANSI 编码保存文件的编辑器中编写了 C 代码。

这极不可能。您发布的 C 源代码中没有可见的非 ASCII 字符。如果有的话,您会从 C 编译器收到一条错误消息(除非它在字符串常量中;我从未尝试过)。

你说:奇怪的是,如果我在记事本中重新输入代码,并使用 UTF8 编码保存文件,我会收到编译时错误,提示无效字符。

这并不奇怪。记事本在前面添加了 UTF-8 BOM。这意味着您的 C 编译器会看到一个以 3 字节垃圾开头的源文件。不要使用记事本。使用适当的文本编辑器。

迹象表明问题更有可能出在您的 Python 输入中。 Python 3 中默认的源文件编码是 UTF-8。您的文件包含“字节 0x89”,它不是有效的 UTF-8 前导字节,Windows cp125X 编码将其映射到 别名 U+2030 PER MILLE SIGN - 或者将其放在字符串常量中或者您错误地输入了 %(百分号)。然而,很难猜测你是如何获得回溯的。进入解释器(例如 IDLE)并输入 import spam 不应给您回溯。

关于python - 导入 .pyd 文件时出现 UnicodeDecodeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3536471/

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