1. wprintf
Q : sizeof(wchar_t) = ?
A : 随编译器不同。(所以:在需要跨平台的时候尽量不用wchar_t) vc : sizeof(wchar_t) = 2;
Q: 在vc中,为什么直接使用wprintf(L"测试1234")会没有结果
A: 没有设置好locale,这样做
setlocale(LC_ALL ,
"
chs
"
);
wprintf(L " %s " ,L " 测试1234 " );
wprintf(L " %s " ,L " 测试1234 " );
或者(假设当前活动codepage为chs)
char
scp[
16
];
int cp = GetACP();
sprintf(scp, " .%d " ,cp);
setlocale( LC_ALL, scp );
wprintf(L " 测试1234 " );
int cp = GetACP();
sprintf(scp, " .%d " ,cp);
setlocale( LC_ALL, scp );
wprintf(L " 测试1234 " );
2. wcout
一样,不过设定locale,请用std::locale
locale loc(
"
chs
"
);
wcout.imbue(loc);
wcout << L " 测试1234 " << endl;
wcout.imbue(loc);
wcout << L " 测试1234 " << endl;
这篇文章应该是[netsin ]的成果,我勤快,记下来。
注:wprintf是C的标准库函数,但wcout不是C++的标准成员,C++中的 L"……" 是宽字符,却未必是unicode字符,这与编译器实现