我的主要平台是 Windows,这就是我在内部使用 UTF-16(主要是 BMP 字符串)的原因。我想对这些字符串使用控制台输出。
不幸的是没有std::u16cout或std::u8cout,所以我需要使用std::wcout。因此,我必须将 u16strings 转换为 wstrings - 最好(也是最简单)的方法是什么?
在 Windows 上,我知道 wstring 指向 UTF16 数据,因此我可以创建一个简单的 std::u16string_view 使用相同的数据(无转换)。但是在 Linux 上 wstring 通常是 UTF32 ......有没有办法在没有宏和假设 sizeof(wchar_t) == 2 => utf16 的情况下做到这一点?
在MSVC 上将 utf-16转换为utf-32非常简单 - 使用C11的codecvt_utf16语言环境方面.但是在GCC(gcc(Debian 4.7.2-5)4.7.2)中,这个新功能似乎还没有实现.有没有办法在没有iconv的情况下在Linux上执行这种转换(最好使用std库的转换工具)?