From: William N. <fir...@ho...> - 2009-02-10 17:15:57
|
I want to start using uncicode strings. Looking at Py::string I see the method as_unicodestring, however this returns a std::basic_string<Py_UNICODE> and provides no option of encodeing... Another method is the encode method, this lets me provide the encoding but just returns another Py::String... What exactly do I need to do to go between a python unicode string and a std::wstring (where sizeof(wchar_t)==2)in UTF-16 encoding? _________________________________________________________________ Twice the fun—Share photos while you chat with Windows Live Messenger. Learn more. http://www.microsoft.com/uk/windows/windowslive/products/messenger.aspx |
From: Barry S. <ba...@ba...> - 2009-02-12 21:13:24
|
On 10 Feb 2009, at 17:15, William Newbery wrote: > I want to start using uncicode strings. > > Looking at Py::string I see the method as_unicodestring, however > this returns a std::basic_string<Py_UNICODE> and provides no option > of encodeing... > > Another method is the encode method, this lets me provide the > encoding but just returns another Py::String... > > > What exactly do I need to do to go between a python unicode string > and a std::wstring (where sizeof(wchar_t)==2)in UTF-16 encoding? I take it that Py_UNICODE is 4 on your platform. You could try encode('utf-16') to get a Py::String that is in utf-16. Then use as_std_string() to get a std:string, use c_str() to get a pointer to the contents and cast it to wchar_t. Adding a as_std_wstring would be a reasonable thing to add to PyCXX to make this convenient. as_std_wstring could look inside the Py_Object and avoid a number of conversion steps. Barry |