问题是如何将 wstring 转换为字符串?
我有下一个例子:
#include <string>
#include <iostream>
int main()
{
std::wstring ws = L"Hello";
std::string s( ws.begin(), ws.end() );
//std::cout <<"std::string = "<<s<<std::endl;
std::wcout<<"std::wstring = "<<ws<<std::endl;
std::cout <<"std::string = "<<s<<std::endl;
}
带有注释行的输出是:
std::string = Hello
std::wstring = Hello
std::string = Hello
但没有只是:
std::wstring = Hello
这个例子有什么问题吗?我可以像上面那样进行转换吗?
编辑
新示例(考虑到一些答案)是
#include <string>
#include <iostream>
#include <sstream>
#include <locale>
int main()
{
setlocale(LC_CTYPE, "");
const std::wstring ws = L"Hello";
const std::string s( ws.begin(), ws.end() );
std::cout<<"std::string = "<<s<<std::endl;
std::wcout<<"std::wstring = "<<ws<<std::endl;
std::stringstream ss;
ss << ws.c_str();
std::cout<<"std::stringstream = "<<ss.str()<<std::endl;
}
输出是:
std::string = Hello
std::wstring = Hello
std::stringstream = 0x860283c
因此 stringstream 不能用于将 wstring 转换为字符串。
原文由 BЈовић 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是基于其他建议的解决方案:
这通常适用于 Linux,但会在 Windows 上产生问题。