Python中的C扩展:将wchar字符串转换为Python值
在Python的C扩展中,我可以使用 Py_BuildValue()
来把字符字符串转换成Python的值,方法是这样写: Py_BuildValue("s", str)
。但是,如果字符串是宽字符数组(wchar array),就不能使用 Py_BuildValue("s", str)
了。
我想我可以这样使用PyUnicode:
PyObject* pb=PyUnicode_FromUnicode( (const Py_UNICODE*)(str), wcslen(str) );
PyObject *val = Py_BuildValue("o", pb);
但是,这样做不行。我该怎么把宽字符字符串转换成Python的值呢?
1 个回答
2
我觉得你不需要把 PyUnicode_FromUnicode
和 Py_BuildValue
结合在一起使用。
下面的 pb
已经是一个 Python 的 Unicode 对象了。
PyObject* pb=PyUnicode_FromUnicode( (const Py_UNICODE*)(str), wcslen(str) );
用 Py_BuildValue
来处理它其实是多余的,不过这样做也没什么坏处。我认为你遇到的问题是因为格式不对,o
应该改成 O
。
你也可以用 Py_BuildValue
来把一个以空字符结尾的 Unicode 数据(UCS-2 或 UCS-4)转换成 Python 的 Unicode 对象。
比如:
const wchar_t *w = L"Hello world!";
PyObject* pb = Py_BuildValue("u", w);
更多内容