0
#include <iostream>
using namespace std;
void f1()
{
wcout.imbue(locale("chs"));
wcout << L"您" << endl;
}
void f2()
{
locale loc(wcout.getloc(), new codecvt<wchar_t, char, mbstate_t>());
wcout.imbue(loc);
wcout << L"好" << endl;
}
int main()
{
f1(); // OK
f2(); // Error. There is no output as expected.
}
根據cplusplus.com的在線文檔:爲什麼std :: codecvt <wchar_t,char,mbstate_t>不能像定義的那樣工作?
codecvt<wchar_t,char,mbstate_t>:
converts between native wide and narrow character sets.
這個程序編譯VC++,和在Windows上運行。
在此程序中,內部字符集是UCS-2,由VC++編譯器定義;外部字符集,即窄字符集,在控制檯環境中是GBK(中文字符集)。如果文檔是真的,則wcout
可以將UCS-2的Unicode字符串轉換爲GBK,如f1()
所示;但是,它沒有。爲什麼?
更好的文檔:['std :: codecvt'](http://en.cppreference.com/w/cpp/locale/codecvt)。 – IInspectable