如何将UTF-8编码的std :: string转换为UTF-16 std :: string?有可能吗?
不,我不能在我的情况下使用std :: wstring。
Windows,MSVC-11.0。
答案 0 :(得分:4)
如何尝试这样: -
std::string s = u8"Your string";
// #include <codecvt>
std::wstring_convert<std::codecvt<char16_t,char,std::mbstate_t>,char16_t> convert;
std::u16string u16 = convert.from_bytes(s);
std::string u8 = convert.to_bytes(u16);
同时检查this以获取UTF转换为UTF。
来自文档: -
专业化codecvt之间进行转换 UTF-16和UTF-8编码方案,以及专业化 codecvt在UTF-32和。之间进行转换 UTF-8编码方案。
答案 1 :(得分:0)
我遇到了很多这样的问题,试图做到这一点,并且与Visual Studio相似,只是放弃了。与进行转换时,存在链接的已知问题。 std :: wstring的转换并使用std :: codecvt。
请在此处查看: https://github.com/flutter/flutter/issues/22721
我为解决问题所做的工作已从同类海报的代码中复制,后者使用iconv库。然后,我要做的就是调用convert(my_str,strlen(my_str)和&used_bytes),其中my_str是char [],strlen(my_str)是它的长度,size_t used_bytes = strlen(my_str)* 3;我只是给它足够的字节来使用。在该函数中,您可以更改iconv_t foo = iconv_open(“ UTF-16”,“ UTF-8”),研究setlocale()并创建传递给上面位于该函数中的iconv_open()的enc字符串。上面的链接中所有的荣耀。
陷阱正在编译并使用iconv,它几乎希望在Windows上使用Cygwin或类似工具,但是您可以在Visual Studio中使用它。 Convert C++ std::string to UTF-16-LE encoded string处有一个纯粹的Win32 libiconv,可以满足您的需求。
我想说一下iconv,看看它在简短的测试程序中是如何进行的。祝你好运!