Python Unicode对象和C API(从pyunicode对象检索char*) 我现在将所有的C++引擎类绑定到Python,用于游戏脚本的目的。 最新的挑战是,假设您将脚本中的变量设置为字符串,例如 string = 'hello world'

Python Unicode对象和C API(从pyunicode对象检索char*) 我现在将所有的C++引擎类绑定到Python,用于游戏脚本的目的。 最新的挑战是,假设您将脚本中的变量设置为字符串,例如 string = 'hello world',python,string,unicode,binding,ascii,Python,String,Unicode,Binding,Ascii,这将成为PyUnicode对象。接下来,我们要从绑定的C端函数调用脚本中此对象上的函数。PrintToLog(string),作为一个例子,让我们假设这个c函数就是这样的 void PrintToLog( const char * thisString ) { //file IO stuff as expected myLog << thisString; //more stuff involving fileIO } void PrintToLog(常量字符*此

这将成为PyUnicode对象。接下来,我们要从绑定的C端函数调用脚本中此对象上的函数。PrintToLog(string),作为一个例子,让我们假设这个c函数就是这样的

void PrintToLog( const char * thisString )
{
   //file IO stuff as expected
   myLog << thisString;
   //more stuff involving fileIO
}
void PrintToLog(常量字符*此字符串)
{
//按预期归档IO内容

myLog我相信您正在寻找的函数是。这将为您提供一个非unicode(ASCII)python字符串。然后您可以采用常规方法从中提取
char*

我在Python3中遇到了类似的问题。我解决了以下问题

如果你有一个“mystring”,做一些类似的事情

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

PyBytes已被解释。

返回的对象是否仍然定义为PyUnicode对象?如果是,我可以调用PyUnicode作为数据来获取对象的内部缓冲区,但如果不是这样返回,那么存在什么函数允许我提取字符*?好的,似乎得到了结果。目前它是一个随机数据字符串,但是我能够提取数据。一旦我发现我做错了什么,一切都会好起来。谢谢你们两位的帮助=)(如果你们还在的话…)你能详细介绍一下“从中提取
char*
的正常方法”吗?我正在试图找出如何获取
char*
,我发现PyUnicode\u AsASCIIString返回一个
PyObject*
…我可以使用
PyUnicode\u AsUTF8
?@lindes当然,我写了一些(希望接近有效)此处的伪代码:如果字符串不能进行ASCII编码,最好在
PyUnicode\u asasasitring
之后添加
NULL
检查。