[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends-ml 12727] Re: 議事録「 Java 言語仕様第 3 版」を読む会(第 5 回)
高橋(智)です。
Javaとはほぼ無関係の内容ですが、std::codecvtとboostのutf8_codecvt_facetを
組み合わせたサンプルを書いてみました。
"TAKAHASHI, Tomohiro" wrote:
> あとは、Boostでcodecvtを使えばwchar_t<->UTF-8変換できたような気も... 試したこと無いです。
--------------------------------------------------------------------
#include <boost/archive/detail/utf8_codecvt_facet.hpp>
using namespace std;
using namespace boost::archive::detail;
void foo()
{
locale org_locale;
locale utf8_locale(org_locale, new utf8_codecvt_facet());
const wstring wstr = L"日本語です";
int bufsize = wstr.size()*4 + 1;
string dst;
dst.resize(bufsize);
typedef codecvt<wchar_t, char, mbstate_t> CodeCvt;
const CodeCvt& cvt = use_facet<CodeCvt>(utf8_locale);
mbstate_t state;
wchar_t* next1 = NULL;
char* next2 = NULL;
int ret = cvt.out(state,
wstr.c_str(),
wstr.c_str() + wstr.size(),
next1,
const_cast<char*>(dst.c_str()),
const_cast<char*>(dst.c_str()) + dst.size(),
next2);
if( ret == codecvt_base::ok )
{
const char* utf8 = dst.c_str();
...
}
}
--------------------------------------------------------------------
--
高橋智宏
Java読書会( http://www.javareading.com/bof/ )