我正在尝试将字符串值传递给Python函数并获取utf-8字符串值。该函数检索日语字符并返回另一种语言的字符。
我在Python脚本中使用了ctypes.windll.user32.MessageBoxW
,并确保Python函数没有问题。我尝试了一个简单的功能,例如return 'hello world'
进行测试。我还使用assert
检查了每个函数。我想问题是从PyBytes_AsString
开始的。它总是返回DB DB DB DB DB DB DB...
(以十六进制表示)。但是我不知道该如何解决。
char* result;
PyObject* module, *func, *arg, *ret, *value;
Py_Initialize();
PyObject* sysPath = PySys_GetObject("path");
PyObject* path = PyUnicode_FromString(".");
PyList_Append(sysPath, path);
module = PyImport_ImportModule("test");
if (module != 0)
{
const wchar_t* w = L"翻訳テスト";
func = PyObject_GetAttrString(module, "translate");
arg = PyTuple_New(1);
value = PyUnicode_FromWideChar(w, wcslen(w));
PyTuple_SetItem(arg, 0, value);
ret = PyObject_CallObject(func, arg);
PyObject* repr = PyObject_Repr(ret);
PyObject* str = PyUnicode_AsEncodedString(repr, "utf-8", "strict");
result = PyBytes_AsString(str);
Py_DECREF(repr);
Py_DECREF(str);
Py_DECREF(module);
Py_DECREF(func);
Py_DECREF(arg);
Py_DECREF(ret);
fstream file("text.txt", std::ios::out);
file << result;
file.close();
}
Py_Finalize();
答案 0 :(得分:0)
result = PyBytes_AsString(str)
返回指向str
内部缓冲区的指针,因此在将Py_DECREF(str)
写入文件之前,请不要result
。