Застрял с Unicode , Boost, C ++, codecvts

В C ++ я хочу использовать Unicode для чего-то. Так что после того, как я провалился в кроличью нору Unicode, я оказался в вагон-катастрофе из-за неразберихи, головных болей и локаций.

Но в Boost у меня возникла досадная проблема: я пытался использовать пути к файлам Unicode и пытался использовать библиотеку опций программы Boost с вводом Unicode. Я читал все, что мог найти по предметам locales, codecvts, Unicode encodings и Boost.

Моя текущая попытка заставить все работать - это использовать codecvt, который принимает строку UTF-8 и преобразует ее в кодировку платформы (UTF-8 в POSIX, UTF-16 в Windows). Я пытался избегайте 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;
}

Я думаю, что у меня был какой-то другой вид преобразования, работающий с использованием широких символов, но я действительно не знаю, что я вообще делаю. Я не знаю, какой инструмент лучше всего подходит для работы на данный момент. Помощь?

12
задан Jookia 22 October 2011 в 12:49
поделиться