#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
的联机文档:
codecvt<wchar_t,char,mbstate_t>:
converts between native wide and narrow character sets.
此程序使用VC++编译,并在Windows上运行。
在这个程序中,内部字符集是UCS-2,由VC++编译器定义;外部字符集,即窄字符集,在控制台环境中是GBK(一种中文字符集)。如果文档是真实的,那么
wcout
可以将unicode字符串从UCS-2转换为GBK
f1()
做然而,事实并非如此。为什么?