0

请注意,如果我使用 Ascii,一切都很好,但是:

在我的 utf8 编码脚本中,我有这个:

print "frøânçïé"

在我的嵌入式 C++ 中,我有这个:

PyObject*        CPython_Script::print(PyObject *args)
{
        PyObject                *resultObjP        = NULL;
        const char                *utf8_strZ        = NULL;

        if (PyArg_ParseTuple(args, "s", &utf8_strZ)) {
                Log(utf8_strZ, false);

                resultObjP = Py_None;
                Py_INCREF(resultObjP);
        }

        return resultObjP;
}

现在,我知道我的 Log() 可以打印 utf8 (多年来,调试得很好)

但它实际打印的是这样的:

print "frøânçïé"
frøânçïé

另一种方法我是这样的:kj_commands.menu("控件", "同步滑帧", "使用看起来像无滑帧") 或者 kj_commands滑帧”)

在我的 C++ 中,我有:

SuperString                ScPyObject::GetAs_String()
{
        SuperString                str;

        if (PyUnicode_Check(i_objP)) {
                #if 1
                //        method 1
                {
                        ScPyObject                utf8Str(PyUnicode_AsUTF8String(i_objP));

                        str = utf8Str.GetAs_String();
                }
                #elif 0
                //        method 2
                {
                        UTF8Char                *uniZ = (UTF8Char *)PyUnicode_AS_UNICODE(i_objP);

                        str.assign(&uniZ[0], &uniZ[PyUnicode_GET_DATA_SIZE(i_objP)], kCFStringEncodingUTF16);
                }
                #else
                //        method 3
                {
                        UTF32Vec                        charVec(32768); CF_ASSERT(sizeof(UTF32Vec::value_type) == sizeof(wchar_t));
                        PyUnicodeObject                *uniObjP = (PyUnicodeObject *)(i_objP);
                        Py_ssize_t                        sizeL(PyUnicode_AsWideChar(uniObjP, (wchar_t *)&charVec[0], charVec.size()));

                        charVec.resize(sizeL);
                        charVec.push_back(0);
                        str.Set(SuperString(&charVec[0]));
                }
                #endif
        } else {
                str.Set(uc(PyString_AsString(i_objP)));
        }

        Log(str.utf8Z());

        return str;
}

对于字符串“控件”,我得到:Êé߉ª∂

对于字符串 u" unicode ",方法 1、2 和 3,我得到相同的结果:Êé߉ª∂

好吧,那我在做什么错???

4

0 回答 0