在 C++ 中,我想使用 Unicode 来做事。因此,在跌入 Unicode 的兔子洞之后,我最终陷入了混乱、头痛和语言环境的火车残骸中。
但是在 Boost 中,我遇到了一个不幸的问题,即尝试使用 Unicode 文件路径并尝试将 Boost 程序选项库与 Unicode 输入一起使用。我已经阅读了有关语言环境、codecvts、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;
}
我想我使用宽字符进行了其他类型的转换,但我真的不知道我在做什么。我现在不知道什么是适合这项工作的工具。帮助?