#include <iostream> using namespace std; int main() { wcout << "abc" << endl;//wcout会把char自动转换成wchar_t再输出吗? 怎么样验证有没有转换? cout << "你好" << endl;//"你好"是多字节字符串,设置了中文代码页就可以显示。但为什么上面那个L"abc"不可以? cout << L"abc" << endl;//为什么cout不能输出宽字符? 是不是通过locale设置或代码页设置,能让cout输出多字节 return 0; }
如上面所示,
1. 第一个wcout能输出窄本人的字符串,是不是意味着wcout会自动把单字节的字符串,在内存里面转化成双字节的字符串,再输出?
2. 第二个cout输出多字节的中文没有问题。只要代码页设置正确就可以了。
3. 第三个cout输出总是乱码。为什么? cout能输出中文,都不能输出L开头的字符串吗? 能否通过什么设置来让它和wcout一样呢?
谢谢。
解决方案
40
#include <iostream> using namespace std ; int main () { std::wcout.imbue (std::locale ("chs")) ; //控制台的编码是跟随系统,所以wcout要求给出编码 operator<< (cout ,"123\n") ; //我们一般使用的<<是cout的一个友元函数 operator<< (wcout ,L"一二三\n") ; // operator<< (cout ,L"一二三\n") ; //没有这个定义 operator<< (wcout ,"1一二三23\n") ; //输出12,可见它并不执行转换 cout.operator<< ("123") << endl ; //最后这两个函数的参数类型是const void * wcout.operator<< (L"一二三") << endl ; //所以它们其实输出的是一个指针 return 0 ; }