wchar_t是C/C++的字符类型,一种扩展的存储方式,主要用在国际化程序的实现中,但它不等同与Unicode编码;Unicode编码的字符一般是以wchar_t字符存储。
char字符类型只有8个位,只能包含256个字符,而像很多外文字符远超过256个字符,例如:中文、日文、韩文等,这些字符需要占用两个字节空间,所以c++提出了双字节字符类型wchar_t(或叫宽字符类型)。
wchar_t宽字符类型定义:
wchar_t name[] = L"content";
注:wchar_t定义的是双字节类型,需要L告诉编译器content占用2字节的空间,否则编译产生类型报错。
wchar_t宽字符类型输出:
cout输出:字节十六进制数据
wcout输出: 设置本地语言后,正常输出,未设置则发生流错误,需调用wcout.clear()清除错误后方能正常输出
wprintf()输出:以宽字符形式输出
wcout、wprintf输出内容必须使用L 修饰。
wchar_t环境设置:
头文件:<locale>
setlocale(LC_ALL, "chs"); // 设置为中文格式
示例代码:
1 #include <iostream> 2 #include <locale> // 本地语言设置头文件 3 4 using namespace std; 5 6 7 int main(void) 8 { 9 wchar_t chinese[] = L"中国"; // 字符前添加L表示告诉编译器为字符分配2字节空间 10 11 cout << "chinese[] = L\"中国\"" << endl; 12 13 cout << "设置环境前,cout输出:" << chinese << endl; 14 cout << "设置环境前,wcout输出:"; // 没有输出,若Chinese内容为字符串,可以正常输出 15 wcout << chinese; 16 17 /* 18 未设置本地语言之前,wcout直接输出导致流错误, 19 需要先把流错误清除,后边wcout才能正常输出 20 */ 21 wcout.clear(); 22 wcout << endl; 23 24 // wcout << L"你好" <<endl; // 没有设置环境前,会发生流错误 25 setlocale(LC_ALL, "chs"); // 设置为中文环境 26 27 wcout << L"你好" << endl; 28 29 cout << "设置环境后,cout输出: "; 30 cout << chinese << endl; 31 cout << "设置环境后,wcout输出:"; 32 wcout << chinese; 33 cout << endl; 34 cout << "设置环境后,wprintf()输出:"; 35 wprintf(chinese); 36 cout << endl; 37 38 cout << sizeof(chinese) << endl; 39 return 0; 40 }
终端结果: