在C++中,我想使用Unicode来进行操作。但是在深入了解Unicode后,我却遇到了一系列的困惑、头痛和本地化问题。
在Boost中,我尝试着使用Unicode文件路径,并且希望能够使用带有Unicode输入的Boost程序选项库。我已经阅读了关于本地化、编码转换、Unicode编码以及Boost的相关资料。
我目前的尝试是使用一个codecvt将UTF-8字符串转换为平台的编码(在POSIX上是UTF-8,在Windows上是UTF-16),并且尽量避免使用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;
}
我记得我曾经使用宽字符进行某种转换,但是我真的不知道自己在做什么。此时我也不知道适合此工作的正确工具是什么。请帮忙?