You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#pragma once
#include <iostream>
#include <ostream>
#include <sstream>
#ifndef _MSC_VER
#include <boost/locale.hpp>
#else
#include <boost/scoped_array.hpp>
#include "windows.h"
#include "winnls.h" // unicode-multibyte conversion
#endif
inline std::string wide2utf8(const std::wstring& text) { #ifndef _MSC_VER
return boost::locale::conv::to_utf<wchar_t>(text, "UTF-8"); #else
const size_t len_needed = ::WideCharToMultiByte(CP_UTF8, 0, text.c_str(), (UINT)(text.length()) , NULL, 0, NULL, NULL) ; boost::scoped_array<char> buff(new char[len_needed+1]) ; const size_t num_copied = ::WideCharToMultiByte(CP_UTF8, 0, text.c_str(), (UINT)(text.length()) , buff.get(), len_needed+1, NULL, NULL) ; return std::string(buff.get(), num_copied) ; #endif
}
namespace std {
inline ostream& operator<<(ostream& out, const wchar_t* value) { wstring text(value) ; out << wide2utf8(text); return out; }
inline ostream& operator<<(ostream& out, const wstring& value) { out << wide2utf8(value); return out; } }
|