我尝试使用将字符串从c++发送到python字符串
PyObject* pyString = PyUnicode_FromString("/abc/def.html/a%22.php?abc=&def=%22;%00s%01");
....
PyObject* pyArgs = Py_BuildValue("(z)", pyString);
...
PyObject_CallObject(pFunc, pyArgs);
但在脚本中,字符串是错误的:
function(data):
print(data)
结果是:
/abc/def.html/a bogus %pp?abc=&def= %;(null)%
发生了什么?,如果我尝试用%%
转义%
字符,效果很好,但PyUnicode_FromString
不是printf格式。
这是PyUnicode_FromString
函数的错误吗?,我需要原生python escape吗?还是我需要手动逃离?
PyObject* pyArgs = Py_BuildValue("(z)", pyString);
这句话错了。Py_BuildValue
中的'z'
告诉它您传递的参数是const char*
,Python将其转换为Python字符串。但是,您传递的参数已经是一个Python字符串。因此,它试图将PyObject*
重新解释为const char*
,从而产生垃圾。
正确的解决方案是
PyObject* pyArgs = Py_BuildValue("(O)", pyString);
它只是将pyString
解释为Python对象(事实就是这样!(或
PyObject* pyArgs = Py_BuildValue("(z)", "/abc/def.html/a%22.php?abc=&def=%22;%00s%01");
跳过自己创建CCD_ 11。