宽字符

Posted 芬乐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了宽字符相关的知识,希望对你有一定的参考价值。

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.h
setlocale(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,宽字符就好像是拿一个大盒子去装它,
//并没有对原来字符产生任何改变。

 

以上是关于宽字符的主要内容,如果未能解决你的问题,请参考以下文章

CSS代码片段

CSS代码片段

在 Delphi 中将宽字符代码点的十六进制字符串表示形式转换为宽字符

windows 编程 —— 宽字符集 与 Unicode

Python 正则表达式零宽正负向断言的用法及示例代码

Python 正则表达式零宽正负向断言的用法及示例代码