std::string 与 std::wstring 互转实现
时间: 2023-11-06 19:04:31 浏览: 206
在 C++ 中,你可以使用 `std::wstring_convert` 或者 `std::wstringstream` 来实现 `std::string` 和 `std::wstring` 之间的互相转换。以下是两种方法的示例代码:
**方法一:使用 std::wstring_convert**
```cpp
#include <iostream>
#include <locale>
#include <codecvt>
std::wstring StringToWString(const std::string& str) {
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
return converter.from_bytes(str);
}
std::string WStringToString(const std::wstring& wstr) {
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
return converter.to_bytes(wstr);
}
int main() {
std::string utf8Str = "Hello, 世界!";
std::wstring wideStr = StringToWString(utf8Str);
std::cout << "Wide string: " << wideStr << std::endl;
std::wstring wideStr2 = L"你好,世界!";
std::string utf8Str2 = WStringToString(wideStr2);
std::cout << "UTF-8 string: " << utf8Str2 << std::endl;
return 0;
}
```
**方法二:使用 std::wstringstream**
```cpp
#include <iostream>
#include <sstream>
std::wstring StringToWString(const std::string& str) {
std::wstringstream wss;
wss << str.c_str();
return wss.str();
}
std::string WStringToString(const std::wstring& wstr) {
std::stringstream ss;
ss << wstr.c_str();
return ss.str();
}
int main() {
std::string utf8Str = "Hello, 世界!";
std::wstring wideStr = StringToWString(utf8Str);
std::cout << "Wide string: " << wideStr << std::endl;
std::wstring wideStr2 = L"你好,世界!";
std::string utf8Str2 = WStringToString(wideStr2);
std::cout << "UTF-8 string: " << utf8Str2 << std::endl;
return 0;
}
```
无论使用哪种方法,`StringToWString` 函数将 `std::string` 转换为 `std::wstring`,`WStringToString` 函数将 `std::wstring` 转换为 `std::string`。你可以根据需要选择适合的方法进行转换。
请注意,在使用 `std::wstring` 和 `std::string` 进行转换时,确保你的编译环境支持 Unicode 字符集,并且设置了正确的字符集编码。
阅读全文