Я пытаюсь передать строковое значение в функцию Python и получить строковое значение utf-8. Функция извлекает японские символы и возвращает символы на другом языке.
Я использовал ctypes.windll.user32.MessageBoxW
в скрипте Python и убедился, что с функцией 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();