2

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

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

视窗,MSVC-11.0。

4

2 回答 2

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);

还要检查UTF 到 UTF 的转换

来自文档:-

专业化 codecvt 在 UTF-16 和 UTF-8 编码方案之间转换,专业化 codecvt 在 UTF-32 和 UTF-8 编码方案之间转换。

于 2013-09-20T17:00:16.180 回答
0

我遇到了几十个这样的问题,试图用 Visual Studio 来做这个和类似的事情,然后就放弃了。在使用例如 std::wstring 的转换和使用 std::codecvt 进行转换时,存在一个已知的链接问题。

请参阅此处: 将 C++ std::string 转换为 UTF-16-LE 编码字符串

我为解决我的问题所做的工作是从使用 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 中使用它。https://github.com/win-iconv/win-iconv有一个纯 Win32 libiconv可能适合您的需求。

我会说试试 iconv,看看它在一个简短的测试程序中是如何进行的。祝你好运!

于 2018-10-09T02:47:30.447 回答