如何将 UTF-8 编码的 std::string 转换为 UTF-16 std::string
How to convert UTF-8 encoded std::string to UTF-16 std::string
如何将 UTF-8 编码的 std::string 转换为 UTF-16 std::string?可能吗?
不,我不能在我的情况下使用 std::wstring。
视窗,MSVC-11.0。
像这样尝试怎么样:-
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 的转换。
从文档中:-
专用化编解码器在 UTF-16 和 UTF-8 编码方案及其专业化 编解码器在 UTF-32 和 UTF-8 编码方案。
我在尝试使用Visual Studio时遇到了数十个这样的问题,然后就放弃了。 在使用 std::wstring 的转换和使用 std::codecvt 进行转换时,存在一个已知问题。
请看这里:将C++标准::字符串转换为 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; 我只是给了它足够的字节来使用。 在该函数中,您可以更改 foo = iconv_open("UTF-16", "UTF-8"iconv_t),在上面的函数中调查 setlocale() 并创建传递给 iconv_open() 的 enc 字符串,该函数在上面的链接中处于所有荣耀中。
这个陷阱正在编译和使用iconv,它几乎期望在Windows上Cygwin或类似的东西,但你可以在Visual Studio上使用它。 https://github.com/win-iconv/win-iconv 有一个纯粹的Win32 libiconv,可能适合您的需求。
我会说给iconv一个尝试,看看它在一个简短的测试程序中是如何进行的。 祝你好运!
- cppcheck在const std::string[]上引发警告
- 将std::string传递给WriteConsole API
- 为std::string的某个索引赋值
- 使用 std::string () const 函数启动线程或未来
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 如何更改大小(std::string)
- std::string 的对象真的可以移动吗?
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 无法从 std::string 中提取C++ Unicode 符号
- std::string 构造函数如何处理固定大小的 char[]?
- 真的没有来自 std::string_view 的 std::string 的显式构造函数吗?
- 将C++ std::string 转换为 UTF-16-LE 编码的字符串
- 重载 + 自己的类和 std::string 的运算符
- 如何使用 std::string 作为 QHash 的键?
- 将日语 wstring 转换为 std::string
- 可以从std::string继承以提供类型一致性吗
- 构造函数采用std::string_view与std::string并移动
- 在共享缓冲区内存中创建 ::std::string 对象
- std::string.size() 未知行为
- Valgrind 在 std::string::swap 中报告 SIGILL