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