Объект Python Unicode и C API (получение char * из объектов Pyunicode) - PullRequest
10 голосов
/ 22 июля 2011

В настоящее время я связываю все свои классы движка C ++ с python для сценариев игры.Последняя проблема состоит в том, что когда вы говорите, что вы делаете переменную в скрипте строкой, такой как

string = 'hello world'

, это становится PyUnicodeObject.Далее мы хотим вызвать функцию этого объекта в скрипте из связанной функции на стороне C.PrintToLog (string), в качестве примера, скажем, что эта c-функция как таковая

void PrintToLog( const char * thisString )
{
   //file IO stuff as expected
   myLog << thisString;
   //more stuff involving fileIO
}

Так что моя привязка должна извлечь char * из PyUnicodeObject, который сначала будет передан питоном моему универсальномуобработчик функции, который, в свою очередь, извлечет и преобразует пиобъекты в правильный тип c-стороны и передает его моей функции.

Единственная функция, которую я могу найти, извлекает wchar_t * ... Есть ли в любом случае, чтобы получитьпредставление ascii, поскольку мы будем использовать только набор символов ascii.

РЕДАКТИРОВАТЬ: я использую Python 3.2, где все строки Unicode

Ответы [ 2 ]

11 голосов
/ 04 июня 2013

Я столкнулся с похожей проблемой с Python3.Я решил это следующим образом.

Если у вас есть PyUnicodeObject"mystring", сделайте что-то вроде

PyObject * ascii_mystring=PyUnicode_AsASCIIString(mystring);
PrintToLog(PyBytes_AsString(ascii_mystring));
Py_DECREF(ascii_mystring);

PyBytes объясняется здесь .

5 голосов
/ 22 июля 2011

Я считаю, что функция, которую вы ищете - PyUnicode_AsASCIIString .Это даст вам не-Unicode (ASCII) строку Python.И тогда вы можете принять нормальный подход для извлечения char* из этого.

...