Python Unicode对象与C API(从pyunicode对象获取char*)

11 投票
2 回答
6921 浏览
提问于 2025-04-16 22:02

我现在正在把我的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* 类型的字符串。

撰写回答