Python Unicode对象与C API(从pyunicode对象获取char*)
我现在正在把我的C++引擎类绑定到Python上,以便进行游戏脚本编写。最近遇到的一个挑战是,当你在脚本中创建一个字符串变量时,比如说:
string = 'hello world'
这个字符串会变成一个叫做PyUnicodeObject的对象。接下来,我们想要在脚本中调用这个对象的一个函数,比如说PrintToLog( string ),假设这个C语言的函数是这样的:
void PrintToLog( const char * thisString )
{
//file IO stuff as expected
myLog << thisString;
//more stuff involving fileIO
}
所以我的绑定需要从PyUnicodeObject中提取一个char *,这个char *最开始是由Python传递给我的通用函数处理器的,接着这个处理器会提取并转换这些Python对象为正确的C语言类型,然后再传递给我的函数。
我找到的唯一一个函数是提取wchar_t*的……有没有办法获取ASCII表示呢?因为我们只会使用ASCII字符集。
编辑:我使用的是Python 3.2,在这个版本中,所有字符串都是Unicode。
2 个回答
12
我之前也遇到过类似的问题,使用Python3时,我是这样解决的。
如果你有一个叫做 "mystring" 的 PyUnicodeObject,可以这样做:
PyObject * ascii_mystring=PyUnicode_AsASCIIString(mystring);
PrintToLog(PyBytes_AsString(ascii_mystring));
Py_DECREF(ascii_mystring);
关于PyBytes的解释可以在 这里 找到。
6
我觉得你想要的功能是 PyUnicode_AsASCIIString。这个功能可以把你得到的内容转换成一个非Unicode的(ASCII)Python字符串。然后你就可以用普通的方法从中提取出一个 char*
类型的字符串。