Python中的C扩展:将wchar字符串转换为Python值

3 投票
1 回答
1299 浏览
提问于 2025-04-17 17:33

在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_FromUnicodePy_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);

更多内容

撰写回答