2013-03-01 3 views
2

В C-расширении Python я могу использовать Py_BuildValue() для строки символов Conver для Python. Значение, подобное этому: Py_BuildValue("s", str). Но, если строка - это wchar-массив, то нельзя использовать Py_BuildValue("s", str).C-extension в Python: Conver wchar string to Python Значение

Я думаю, что я могу использовать PyUnicode так:

PyObject* pb=PyUnicode_FromUnicode((const Py_UNICODE*)(str), wcslen(str)); 
PyObject *val = Py_BuildValue("o", pb); 

Но, это не работает. Как преобразовать строку wchar в значение Python?

ответ

1

Думаю, вам не нужно комбинировать PyUnicode_FromUnicode и Py_BuildValue.

Следующий pb уже является юникодным объектом Python.

PyObject* pb=PyUnicode_FromUnicode((const Py_UNICODE*)(str), wcslen(str)); 

Использование Py_BuildValue для обработки он является излишним, но это безвредно. Я думаю, что ваша проблема вызвана неправильным форматом o. Он должен быть O.

Вы также можете использовать Py_BuildValue для преобразования буфера Unicode (UCS-2 или UCS-4) с нулевым завершением в объект Unicode Python.
Например:

const wchar_t *w = L"Hello world!"; 
PyObject* pb = Py_BuildValue("u", w); 

Больше