[C++-sig] Creating a unicode instrance from utf-8 encoded string

Wichert Akkerman wichert at wiggy.net
Mon Feb 21 14:35:42 CET 2011


On 2/21/11 14:33 , Hans Meine wrote:
> Am Montag, 21. Februar 2011, um 11:36:52 schrieb Wichert Akkerman:
>> I'm trying to do something which should be very simple, but I'm not
>> having much luck figuring out how from the existing documentation.
>>
>> For a python 2 project I am trying to return a gettext-translated string
>> as a unicode instance to python. The return value for gettext() is a
>> UTF-8 encoded char*, which should be pretty simple to convert to a
>> python unicode instrance using PyUnicode_FromString. I have a feeling
>> this is trivial to do, but I can't seem to figure out how.
>
> According to http://docs.python.org/c-api/unicode.html , this is exactly what
> PyUnicode_FromString is supposed to do.
>
> What's the problem?  Do you get an error?  Some code might help.

For a single unicode instance this is indeed working correctly. 
Unfortunately it breaks down when I need to return a list of unicode 
instances. My simple approach looks like this:

boost::python::list PyMyFunc() {
     std::vector<std::string> raw_strings = BaseClass::MyFunc();
     std::vector<std::string>::const_iterator i;
     boost::python::list result;

     for (i=raw_strings.begin(); i!=raw_strings.end(); i++)
         result.append(PyUnicode_FromString(i->c_str()));
     return result;
}

but that results in a lot of compile errors suggesting that bp::list 
does not know how to handle PyObject* values.

Wichert.


More information about the Cplusplus-sig mailing list