Esempio n. 1
0
        /// <summary>
        ///     Return the PyObject as a string
        /// </summary>
        /// <returns></returns>
        public string ToUnicodeString()
        {
            try
            {
                if (!IsValid)
                {
                    return(null);
                }

                // Manually convert from buffers to string
                if (GetPyType() == PyType.UnicodeType)
                {
                    var size = Py.PyUnicodeUCS2_GetSize(this);
                    if (size <= 0)
                    {
                        return(null);
                    }

                    var ptr = Py.PyUnicodeUCS2_AsUnicode(this);
                    if (ptr == IntPtr.Zero)
                    {
                        return(null);
                    }

                    return(Marshal.PtrToStringUni(ptr, size));
                }
                else
                {
                    var size = Py.PyString_Size(this);
                    if (size <= 0)
                    {
                        return(null);
                    }

                    var ptr = Py.PyString_AsString(this);
                    if (ptr == IntPtr.Zero)
                    {
                        return(null);
                    }

                    return(Marshal.PtrToStringAnsi(ptr, size));
                }
            }
            finally
            {
                HandlePythonError();
            }
        }