1.宽字符是为了解决国际化,英文软件写好后,要发行到不同的国家,这时就需要使用宽字符,宽字符能把汉字当成一个字符。
2.字符集
<1>多字节字符集 (窄字符)
<2>Unicode字符集(用来解决国际化)(宽字符)
3.MessageBox MessageBox引用了windows.h文件。
- 宽字符与窄字符的区别:窄字符1字节,窄字符2字节。
- MessageBox这个函数与 设置有关,默认是unicode,这个设置应该只影响MessageBox函数吧。
- 宽字符有一个宏指令 L(常量宽字符的标识符),加上它就代表宽字符。
char ch = ‘A‘;
wchar_r ch1 = L‘A’;
printf("%d%d",sizeof()sizeof(wchar_t)); 结果:1和2
printf("%d%d",sizeof(ch)sizeof(ch1)); 结果:1和2
printf("%d",sizeof("1我")); 占4个字节,1,我
printf("%d",sizeof(L"1我")); 占6个字节,1,我 各占一个字符;\0,占2个字节
系统设置unicode,需要宽字符 MessageBox(0, L"你好",L“大家好”,0); 运行成功,无乱码
系统设置为多字节字符集 MessageBox(0,"你好","大家好",0); 运行成功,无乱码
MessageBoxA代表调用窄字符
MessageBoxW就表示调用宽字符,想要打印出上面的东西就需要加L了。
当你在程序里设置为BoxA或BoxW那就不用管系统设置了什么,就是看A或W了
为了移植,windows提供了一种自定义的宏TEXT,可以让Message正常工作,自动调整为与编译器设置相同的。
MessageBox(0,TEXT(“你好”),TEXT("大家好"),0)
4.本地化(没有调windows情况下,写一个纯C应用程序,这是需要对宽字符有一个了解)
窄字符也可以显示汉字,但是他处理汉字时,不能把汉字当做一个一个字符来处理
char str[10] = "我" printf("%s",str);//窄字符显示汉字 pirntf("\n%c%c",str[0],str[1]); //这时都会打印出‘我’,pirntf("\n%c %c",str[0],str[1])在%c之间插入空格,就显示不出来了 包含头文件locale.hsetlocale(LC_ALL,"zh-CN"); //没有这个下面的汉字显示的是乱码。LC_ALL表全部生效wchar_t wstr[10] = L"1234我是好人"; //宽字符用wprintf,显示英文wprintf(L"%ls",wstr); //L,l都表示宽字符处理显示英文不需要本地化,显示中文需要本地化。
宽字符,窄字符对原来的英文没有变化,只是换了一个大盒子来装它。
5.
char ch = ‘A‘; wchar_t wch = L‘A’; printf("%d",wch); //在这里打印的只还是65,宽字符就好像是拿一个大盒子去装它,//并没有对原来字符产生任何改变。