В C ++ я хочу использовать Unicode для работы. Так что, упав в кроличью нору Unicode, мне удалось оказаться в железнодорожной катастрофе, вызванной растерянностью, головными болями и местами.
Но в Boost у меня возникла неудачная проблема: пытаться использовать пути к файлам Unicode и пытаться использовать библиотеку опций программы Boost с вводом Unicode. Я прочитал все, что смог найти по темам, связанным с локалями, кодовыми кодами, кодировками Unicode и 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;
}
Я думаю, что у меня был какой-то другой вид преобразования, работающий с использованием широких символов, но я действительно не знаю, что я вообще делаю. Я не знаю, какой инструмент лучше всего подходит для этой работы. Помощь