本文整理汇总了C++中PyUnicode_AsUTF8String函数的典型用法代码示例。如果您正苦于以下问题:C++ PyUnicode_AsUTF8String函数的具体用法?C++ PyUnicode_AsUTF8String怎么用?C++ PyUnicode_AsUTF8String使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了PyUnicode_AsUTF8String函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: calc_attrs_length
static int calc_attrs_length(PyObject *attributes, int indent,
int self_indent)
{
int attr_length = 0;
int i;
if (indent == -1)
return -1;
for (i = 0; i < PyList_Size (attributes); ++i)
{
PyObject *tuple, *pyvalue;
PyObject *s = NULL;
char *attr, *value;
char *escaped;
tuple = PyList_GetItem (attributes, i);
if (PyTuple_GetItem(tuple, 1) == Py_None)
continue;
if (!PyArg_ParseTuple(tuple, "sO", &attr, &pyvalue))
return -1;
if (PyUnicode_Check(pyvalue)) {
s = PyUnicode_AsUTF8String(pyvalue);
if (!s) {
return -1;
}
value = PyString_AsString(s);
} else if (PyString_Check(pyvalue)) {
value = PyString_AsString(pyvalue);
} else {
PyErr_SetString(PyExc_TypeError,
"value must be string or unicode");
return -1;
}
escaped = g_markup_escape_text (value, -1);
attr_length += 2 + strlen(attr) + strlen(escaped) + 2;
g_free(escaped);
Py_XDECREF(s);
}
return attr_length + indent + self_indent;
}
示例2: statement_create
int statement_create(Statement* self, Connection* connection, PyObject* sql)
{
const char* tail;
int rc;
PyObject* sql_str;
char* sql_cstr;
self->st = NULL;
self->in_use = 0;
if (PyString_Check(sql)) {
sql_str = sql;
Py_INCREF(sql_str);
} else if (PyUnicode_Check(sql)) {
sql_str = PyUnicode_AsUTF8String(sql);
if (!sql_str) {
rc = PYSQLITE_SQL_WRONG_TYPE;
return rc;
}
} else {
rc = PYSQLITE_SQL_WRONG_TYPE;
return rc;
}
self->in_weakreflist = NULL;
self->sql = sql_str;
sql_cstr = PyString_AsString(sql_str);
rc = sqlite3_prepare(connection->db,
sql_cstr,
-1,
&self->st,
&tail);
self->db = connection->db;
if (rc == SQLITE_OK && check_remaining_sql(tail)) {
(void)sqlite3_finalize(self->st);
self->st = NULL;
rc = PYSQLITE_TOO_MUCH_SQL;
}
return rc;
}
示例3: DataDownload
//-------------------------------------------------------------------------------------
StringDataDownload::StringDataDownload(PyObjectPtr objptr,
const std::string & descr, int16 id):
DataDownload(objptr, descr, id)
{
PyObject* pyobj = PyUnicode_AsUTF8String(objptr.get());
if(pyobj == NULL)
{
SCRIPT_ERROR_CHECK();
error_ = true;
}
else
{
totalBytes_ = (uint32)PyBytes_GET_SIZE(pyobj);
stream_ = new char[totalBytes_ + 1];
memcpy(getOutStream(), PyBytes_AS_STRING(pyobj), totalBytes_);
Py_DECREF(pyobj);
}
}
示例4: weechat_python_unicode_to_string
char *
weechat_python_unicode_to_string (PyObject *obj)
{
PyObject *utf8string;
char *str;
str = NULL;
utf8string = PyUnicode_AsUTF8String (obj);
if (utf8string)
{
if (PyBytes_AsString (utf8string))
str = strdup (PyBytes_AsString (utf8string));
Py_XDECREF(utf8string);
}
return str;
}
示例5: PySfPostFX_LoadFromMemory
static PyObject *
PySfPostFX_LoadFromMemory (PySfPostFX *self, PyObject *args)
{
char *effect;
#ifdef IS_PY3K
PyObject *string = PyUnicode_AsUTF8String(args);
if (string == NULL)
return NULL;
effect = PyBytes_AsString(string);
#else
effect = PyString_AsString(args);
#endif
bool result = self->obj->LoadFromMemory(effect);
#ifdef IS_PY3K
Py_DECREF(string);
#endif
return PyBool_FromLong(result);
}
示例6: pyobj2doc_pair
static inline void
pyobj2doc_pair(PyObject *key, PyObject *value,
rapidjson::Value& doc, rapidjson::Document& root)
{
const char *key_string;
#ifdef PY3
PyObject *utf8_item;
utf8_item = PyUnicode_AsUTF8String(key);
key_string = PyBytes_AsString(utf8_item);
#else
key_string = PyString_AsString(key);
#endif
rapidjson::Value s;
s.SetString(key_string, root.GetAllocator());
rapidjson::Value _v;
pyobj2doc(value, _v, root);
doc.AddMember(s, _v, root.GetAllocator());
}
示例7: Preprocessor_preprocess
static PyObject* Preprocessor_preprocess(Preprocessor* self, PyObject *args)
{
PyObject *f = NULL;
if (!PyArg_ParseTuple(args, "|O:preprocess", &f))
return NULL;
try
{
boost::shared_ptr<FILE> file;
long fd;
if (!f || f == Py_None)
{
fd = fileno(stdout);
}
else if (PyUnicode_Check(f))
{
ScopedPyObject utf8_filename(PyUnicode_AsUTF8String(f));
const char *filename;
if (utf8_filename && (filename = PyBytes_AsString(utf8_filename)))
{
file.reset(fopen(filename, "w"), &fclose);
fd = fileno(file.get());
}
else
{
return NULL;
}
}
else
{
// Assume it's a file-like object with a fileno() method.
PyObject *pylong = PyObject_CallMethod(f, (char*)"fileno", NULL);
if (!pylong || (fd = PyLong_AsLong(pylong)) == -1)
return NULL;
}
self->preprocessor->preprocess(fd);
}
catch (...)
{
set_python_exception();
return NULL;
}
Py_INCREF(Py_None);
return Py_None;
}
示例8: opencc__convert
static PyObject *
opencc__convert(register openccobject *dp, PyObject *args)
{
PyObject *str;
PyObject *ret;
PyObject *tmp;
int is_unicode = 0;
char *out = NULL;
if (!PyArg_ParseTuple(args, "O:convert", &str))
return NULL;
if(!dp->opencc){
PyErr_SetString(PyExc_ValueError, "ValueError: I/O operation on closed file.");
return NULL;
}
if (PyString_Check(str)){
tmp = str;
}else if (PyUnicode_Check(str)){
is_unicode = 1;
tmp = PyUnicode_AsUTF8String(str);
}else{
PyErr_SetString(PyExc_TypeError, "TypeError: must be string or buffer.");
return NULL;
}
out = opencc_convert_utf8(dp->opencc,
PyString_AsString(tmp),
PyString_Size(tmp));
ret = PyString_FromString(out);
PyMem_Free(out);
if(is_unicode){
Py_DECREF(tmp);
tmp = PyString_AsDecodedObject(ret, "utf8", NULL);
Py_DECREF(ret);
ret = tmp;
}
return ret;
}
示例9: PyXBMCGetUnicodeString
int PyXBMCGetUnicodeString(std::string& buf, PyObject* pObject, bool coerceToString,
const char* argumentName, const char* methodname)
{
// TODO: UTF-8: Does python use UTF-16?
// Do we need to convert from the string charset to UTF-8
// for non-unicode data?
if (PyUnicode_Check(pObject))
{
// Python unicode objects are UCS2 or UCS4 depending on compilation
// options, wchar_t is 16-bit or 32-bit depending on platform.
// Avoid the complexity by just letting python convert the string.
PyObject *utf8_pyString = PyUnicode_AsUTF8String(pObject);
if (utf8_pyString)
{
buf = PyString_AsString(utf8_pyString);
Py_DECREF(utf8_pyString);
return 1;
}
}
if (PyString_Check(pObject))
{
buf = PyString_AsString(pObject);
return 1;
}
// if we got here then we need to coerce the value to a string
if (coerceToString)
{
PyObject* pyStrCast = PyObject_Str(pObject);
if (pyStrCast)
{
int ret = PyXBMCGetUnicodeString(buf,pyStrCast,false,argumentName,methodname);
Py_DECREF(pyStrCast);
return ret;
}
}
// Object is not a unicode or a normal string.
buf = "";
PyErr_Format(PyExc_TypeError, "argument \"%s\" for method \"%s\" must be unicode or str", argumentName, methodname);
return 0;
}
示例10: _check_for_unexpected_kwargs
static gboolean
_check_for_unexpected_kwargs (PyGICallableCache *cache,
GHashTable *arg_name_hash,
PyObject *py_kwargs)
{
PyObject *dict_key, *dict_value;
Py_ssize_t dict_iter_pos = 0;
while (PyDict_Next (py_kwargs, &dict_iter_pos, &dict_key, &dict_value)) {
PyObject *key;
#if PY_VERSION_HEX < 0x03000000
if (PyString_Check (dict_key)) {
Py_INCREF (dict_key);
key = dict_key;
} else
#endif
{
key = PyUnicode_AsUTF8String (dict_key);
if (key == NULL) {
return FALSE;
}
}
/* Use extended lookup because it returns whether or not the key actually
* exists in the hash table. g_hash_table_lookup returns NULL for keys not
* found which maps to index 0 for our hash lookup.
*/
if (!g_hash_table_lookup_extended (arg_name_hash, PyBytes_AsString(key), NULL, NULL)) {
char *full_name = pygi_callable_cache_get_full_name (cache);
PyErr_Format (PyExc_TypeError,
"%.200s() got an unexpected keyword argument '%.400s'",
full_name,
PyBytes_AsString (key));
Py_DECREF (key);
g_free (full_name);
return FALSE;
}
Py_DECREF (key);
}
return TRUE;
}
示例11: _append_field_name
/*
* Append a PEP3118-formatted field name, ":name:", to str
*/
static int
_append_field_name(_tmp_string_t *str, PyObject *name)
{
int ret = -1;
char *p;
Py_ssize_t len;
PyObject *tmp;
#if defined(NPY_PY3K)
/* FIXME: XXX -- should it use UTF-8 here? */
tmp = PyUnicode_AsUTF8String(name);
#else
tmp = name;
Py_INCREF(tmp);
#endif
if (tmp == NULL || PyBytes_AsStringAndSize(tmp, &p, &len) < 0) {
PyErr_Clear();
PyErr_SetString(PyExc_ValueError, "invalid field name");
goto fail;
}
if (_append_char(str, ':') < 0) {
goto fail;
}
while (len > 0) {
if (*p == ':') {
PyErr_SetString(PyExc_ValueError,
"':' is not an allowed character in buffer "
"field names");
goto fail;
}
if (_append_char(str, *p) < 0) {
goto fail;
}
++p;
--len;
}
if (_append_char(str, ':') < 0) {
goto fail;
}
ret = 0;
fail:
Py_XDECREF(tmp);
return ret;
}
示例12: PyUnicode_AsUTF8String
/**
* Makes a C string from a Python unicode or bytes object.
*
* If successful, the result is a string that the caller must free().
* Else, returns NULL.
*/
static char *get_string(PyObject *obj)
{
if(PyUnicode_Check(obj))
{
const char *str;
PyObject *pyutf8 = PyUnicode_AsUTF8String(obj);
if(pyutf8 == NULL)
return NULL;
#if PY_MAJOR_VERSION >= 3
str = PyBytes_AsString(pyutf8);
#else
str = PyString_AsString(pyutf8);
#endif
if(str == NULL)
return NULL;
{
char *ret = strdup(str);
Py_DECREF(pyutf8);
return ret;
}
}
else if(
#if PY_MAJOR_VERSION >= 3
PyBytes_Check(obj)
#else
PyString_Check(obj)
#endif
)
{
const char *str;
#if PY_MAJOR_VERSION >= 3
str = PyBytes_AsString(obj);
#else
str = PyString_AsString(obj);
#endif
if(str == NULL)
return NULL;
return strdup(str);
}
else
return NULL;
}
示例13: PySfDrawable_setattro
int PySfDrawable_setattro(PyObject* self, PyObject *attr_name, PyObject *v)
{
#ifdef IS_PY3K
PyObject *string = PyUnicode_AsUTF8String(attr_name);
if (string == NULL) return NULL;
std::string Name(PyBytes_AsString(string));
#else
std::string Name(PyString_AsString(attr_name));
#endif
if (Name == "Render")
{
Py_CLEAR(((PySfDrawable*)self)->obj->RenderFunction);
Py_INCREF(v);
((PySfDrawable*)self)->obj->RenderFunction = v;
}
#ifdef IS_PY3K
Py_DECREF(string);
#endif
return PyObject_GenericSetAttr(self, attr_name, v);
}
示例14: _set_string_attr
static int _set_string_attr(PyObject *self, PyObject *value, const struct _alpm_str_getset *closure) {
alpm_handle_t *handle = ALPM_HANDLE(self);
char *path = NULL;
int ret;
if (PyBytes_Check(value)) {
path = strdup(PyBytes_AS_STRING(value));
} else if (PyUnicode_Check(value)) {
PyObject* utf8 = PyUnicode_AsUTF8String(value);
path = strdup(PyBytes_AS_STRING(utf8));
Py_DECREF(utf8);
} else {
PyErr_SetString(PyExc_TypeError, "logfile path must be a string");
return -1;
}
ret = closure->setter(handle, path);
free(path);
if (ret == -1) RET_ERR("failed setting option value", alpm_errno(handle), -1);
return 0;
}
示例15: umsg
/*
#<pydoc>
def umsg(text):
"""
Prints text into IDA's Output window
@param text: text to print
Can be Unicode, or string in UTF-8 encoding
@return: number of bytes printed
"""
pass
#</pydoc>
*/
static PyObject* py_umsg(PyObject *o)
{
PyObject* utf8 = NULL;
if ( PyUnicode_Check(o) )
{
utf8 = PyUnicode_AsUTF8String(o);
o = utf8;
}
else if ( !PyString_Check(o) )
{
PyErr_SetString(PyExc_TypeError, "A unicode or UTF-8 string expected");
return NULL;
}
int rc;
Py_BEGIN_ALLOW_THREADS;
rc = umsg("%s", PyString_AsString(o));
Py_END_ALLOW_THREADS;
Py_XDECREF(utf8);
return PyInt_FromLong(rc);
}