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.
41 lines
1.0 KiB
41 lines
1.0 KiB
#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;
|
|
}
|
|
}
|
|
|
|
|