我在 Python 模块中遇到了关于 UTF-8/16 的不同方法。这是我第一次尝试编写 Python C 模块,我想知道如何从 Unicode 对象中获取所有字节以使用 C 函数处理这些字节。如我所见,这些可以表示为 C char 数组中的简单 ASCII 字符串?
static PyObject* unicode_worker(PyObject* self, PyObject* args)
{
Py_UNICODE *src;
int srclen;
register Py_UNICODE ch;
wchar_t widecharBuffer[4096];
if (! PyArg_ParseTuple(args, "u#", &src, &srclen))
return NULL;
ch = *src;
PyUnicode_AsWideChar((PyUnicodeObject *)src, widecharBuffer, srclen-1);
Py_RETURN_NONE;
}
现在当我使用 gdb 时:
gdb python
run sh.py
我可以看到错误:
Program received signal SIGSEGV, Segmentation fault.
0x00000036010b05c8 in PyUnicodeUCS4_AsWideChar () from /usr/lib64/libpython2.7.so.1.0
PyUnicode_AsWideChar 调用中可以改进什么,现在有什么问题?
UPD:Mats Petersson,现在问题更清楚了。