windows实现 string 和utf8的转换
时间: 2024-05-08 09:20:43 浏览: 160
在 Windows 平台上,可以使用 MultiByteToWideChar 和 WideCharToMultiByte 函数来实现 string 和 UTF-8 的转换。
将 string 转换为 UTF-8:
```cpp
std::string str = "你好,世界!";
int len = ::MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, NULL, 0);
std::wstring wstr(len, L'\0');
::MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, &wstr[0], len);
len = ::WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, NULL, 0, NULL, NULL);
std::string utf8(len, '\0');
::WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, &utf8[0], len, NULL, NULL);
```
将 UTF-8 转换为 string:
```cpp
std::string utf8 = "你好,世界!";
int len = ::MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), -1, NULL, 0);
std::wstring wstr(len, L'\0');
::MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), -1, &wstr[0], len);
len = ::WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, NULL, 0, NULL, NULL);
std::string str(len, '\0');
::WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, &str[0], len, NULL, NULL);
```
需要注意的是,CP_ACP 表示使用当前系统的 ANSI 代码页,也就是本地语言编码;CP_UTF8 表示 UTF-8 编码。转换时需要先将 string 转换为 wstring,再将 wstring 转换为 UTF-8 编码的 string。
阅读全文