是否可以以独立于平台的方式将 std::string 中的 UTF8 字符串转换为 std::wstring ,反之亦然?在 Windows 应用程序中,我将使用 MultiByteToWideChar 和 WideCharToMultiByte。然而,代码是针对多个操作系统编译的,并且我仅限于标准 C++ 库。
我5年前就问过这个问题了。当时这个帖子对我非常有帮助,我得出了结论,然后我继续我的项目。有趣的是,我最近需要类似的东西,与过去的那个项目完全无关。当我研究可能的解决方案时,我偶然发现了自己的问题:)
我现在选择的解决方案是基于C++11的。 Constantin 中提到的 boost 库他的回答现在已成为标准的一部分。如果我们用新的字符串类型 std::u16string 替换 std::wstring,那么转换将如下所示:
UTF-8 到 UTF-16
std::string source;
...
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>,char16_t> convert;
std::u16string dest = convert.from_bytes(source);
UTF-16 转 UTF-8
std::u16string source;
...
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>,char16_t> convert;
std::string dest = convert.to_bytes(source);
从其他答案可以看出,解决这个问题有多种方法。这就是为什么我不选择接受的答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)