[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/ )