C ++では、Unicodeを使用して処理を実行したいと思います。それで、Unicodeのうさぎの穴に落ちた後、私はなんとか混乱、頭痛、そして場所の列車の大破に終わった。
しかし、Boostでは、Unicodeファイルパスを使用しようとしたり、Unicode入力でBoostプログラムオプションライブラリを使用しようとしたりするという不幸な問題がありました。ロケール、codecvts、Unicodeエンコーディング、Boostのテーマで見つけたものは何でも読んだことがあります。
物事を機能させるための私の現在の試みは、UTF-8文字列を取得してプラットフォームのエンコーディング(POSIXではUTF-8、WindowsではUTF-16)に変換するcodecvtを用意することですが、これは避けようとしていwchar_t
ます。
私が実際に得た最も近い方法は、Boost.Localeを使用してこれを実行し、出力時にUTF-8文字列からUTF-32文字列に変換しようとすることです。
#include <string>
#include <boost/locale.hpp>
#include <locale>
int main(void)
{
std::string data("Testing, 㤹");
std::locale fromLoc = boost::locale::generator().generate("en_US.UTF-8");
std::locale toLoc = boost::locale::generator().generate("en_US.UTF-32");
typedef std::codecvt<wchar_t, char, mbstate_t> cvtType;
cvtType const* toCvt = &std::use_facet<cvtType>(toLoc);
std::locale convLoc = std::locale(fromLoc, toCvt);
std::cout.imbue(convLoc);
std::cout << data << std::endl;
// Output is unconverted -- what?
return 0;
}
ワイド文字を使用して他の種類の変換を行っていたと思いますが、実際に何をしているのかわかりません。この時点で、その仕事に適したツールが何であるかはわかりません。ヘルプ?