c++的locale不同于c的locale,c++的locale是个对象,这个对象又由许多叫facet对象组成,每个facet对象负责处理字符的某个方面 根据国际化的要求。比如下面这个facet:
ctype< charT>
就可以处理宽窄字符转换:
#include<locale>
#include<string>
std::wstring toWstring(std::string str)
{
using namespace std;
wstring wstr;
locale loc = locale();
for (auto const& c : str)
{
wchar_t wchar = std::use_facet<ctype<wchar_t>>(loc).widen(c);
wstr.push_back(wchar);
}
return wstr;
}
std::string toString(std::wstring wstr)
{
using namespace std;
string str;
locale loc = locale();
for (auto const& c:wstr)
{
char ch = std::use_facet<ctype<wchar_t>>(loc).narrow(c);
str.push_back(ch);
}
return str;
}