c++ - UTF8 到/从 STL 中的宽字符转换

标签 c++ unicode stl utf-8 character-encoding

是否可以以独立于平台的方式将 std::string 中的 UTF8 字符串转换为 std::wstring,反之亦然?在 Windows 应用程序中,我将使用 MultiByteToWideChar 和 WideCharToMultiByte。但是,代码是为多个操作系统编译的,我仅限于标准 C++ 库。

最佳答案

我在 5 年前问过这个问题。当时这个帖子对我很有帮助,我得出了一个结论,然后我继续我的项目。有趣的是,我最近需要类似的东西,与过去的那个项目完全无关。在研究可能的解决方案时,我偶然发现了自己的问题:)

我现在选择的解决方案是基于 C++11。 Constantin 在 his answer 中提到的 boost 库现在是标准的一部分。如果我们将 std::wstring 替换为新的字符串类型 std::u16string,那么转换将如下所示:

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

从其他答案中可以看出,有多种方法可以解决这个问题。这就是为什么我不选择接受的答案。

关于c++ - UTF8 到/从 STL 中的宽字符转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/148403/

相关文章:

c++ - 迭代 std::deque 时出现奇怪的运行时错误

c++ - 计算#define的简洁方法

c++ - 在 C++ 中解析文本头数据包的问题

.net - 定期 - 无法将索引 Y 处的 Unicode 字符 X 转换为指定的代码页

sql-server - 无法在 SSIS 中在 unicode 和非 unicode 字符串数据类型之间进行转换

java - 在 Java 中生成 3 字节(0x800 到 0xffff)UTF-8 编码

c++ - 将 std::tuple 添加到 std::map 编译并在 Macos 上运行,而不是在 Linux 上运行

c++ - 使用 Visual Studio 2013 和 Intel Fortran 使用 Fortran 编译混合 C++/C 代码

C++:简单的 fstream 不写入输出文件(不确定它是否正在使用输入文件)

c++ - C++设置容器的问题