boost-users-bounces@lists.boost.org wrote:
Hello,
I try to accomplish the subj with help of boost's utf8_codecvt_facet.
[snip]
std::locale utf8_locale(old_locale, new boost::archive::detail::utf8_codecvt_facet()); std::locale::global(utf8_locale); std::stringstream in; in.imbue(utf8_locale); in.str(utf); std::wstringstream out; out << in; std::wcout << out.str() << std::endl; }
The above code doesn't work: "out" buffer doesn't contain correct unicode interpretation of the string. Actually, all i want is a c++ equivalent to the following WinAPI:
I *think* that this invokes operator<<(const void*) on "out", passing the results of operator void*() on "in". What may have had a chance at producing something near the desired behavior would be to invoke operator<<(wostream&, const char*), like: out << in.str().c_str() Sadly, this won't work either as this uses ctype::widen, not codecvt::do_in to make the conversion. AFAIK, the only use of codedcvt in the iostreams library is for the conversion between the "external" and "internal" encodings done by basic_filebuf. To get the desired behavior, I think you'll have to write your own operator<<(wostream&, const string&) and use the codecvt facet inside it. IIRC, C++0x includes things like wstring_convert to do that.