如何将UTF-8编码的std :: string转换为UTF-16 std :: string

时间:2013-09-20 16:54:07

标签: c++ string encoding utf-8 utf-16

如何将UTF-8编码的std :: string转换为UTF-16 std :: string?有可能吗?

不,我不能在我的情况下使用std :: wstring。

Windows,MSVC-11.0。

2 个答案:

答案 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,看看它在简短的测试程序中是如何进行的。祝你好运!