std::locale loc("German_germany");
std::locale::global(loc);
std::string s = "nj \xa2 + \x80 1\n";
std::cout << "string:"<<s ;
std::wstring ws = to_wstring(s, std::locale("German_germany"));
并且to_wstring是
std::wstring to_wstring (const std::string& str,
const std::locale& loc = std::locale()){
std::vector<wchar_t> buf(str.size());
std::use_facet<std::ctype<wchar_t>>(loc).widen(str.data(),
str.data()+str.size(),
buf.data());
return std::wstring(buf.data(),buf.size());
}
当cout s时,输出为
string:nj¢+€1
这就是我想要的。 但是当程序在其中执行to_wstring,ctype&lt;&gt;()。widen()时,事情会变为错误。 ¢加宽到0xffff。 令人惊讶的是,€的加宽输出是正确的。它从0x80(8位窗口编码)变为0x20ac(UTF16 / USC2编码) 为什么呢?
我在C ++标准库,第二版,第三版中找到了这个例子。在原始例子中,\ xa2代替\ xe4。该字母不能从字符串s cout,也扩展到0xffff。