Windows核心编程(3)字符编码详解-创新互联

一、字符编码 详细介绍

创新互联2013年开创至今,先为商水等服务建站,商水等地企业,进行企业商务咨询服务。为商水企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

1.字节(Byte)是一种计量单位,他是计算机信息技术存储容量的一种单位


2.字符的意义: 字符数计算机文字中使用的文字和符号,比如1,2,3,4,~,@,!,%,^等待

3.在不同编码里字符和字节对应的关系不同

a.在ASCLL码中,一个英文字母(不区分大小写)占一个字节(8bit),一个汉子占两个字节(16bit)

b.UTF-8编码中,一个英文字符等于一个字节,一个中文(含繁体)等于三个字节

c.在Unicode编码中,一个英文两个字节, 一个中文(含繁体)占两个字节

d.英文符号占一个字节,中文符号占两个字节

4.多字符集 : 各国文字编码哟重叠的编码(编码冲突)导致乱码

a.最开始,internet上只有一种字符集------ANS的ASCLL字符集,他用7bits表示一个字符,


总共表示128个字符,包括英文字母,数字,标点符号,之后进行扩展,使用8bits表示一个字符

可以表示256个字符, 再原来的7bits基础上加入了一些特殊字符.

b.后来各国语音的加入,ASCLL已经不能满足需求,各国都在ASCLL的基础上制定了自己的

字符集, 这些从ANSL标准派生的字符集被习惯的称为ANSL字符集

正式名称MBCS(Multi-Byte Chactacter System,即多字节字符系统),每种语言都有自己的字符集

导致各种字符集实在太多,在国际交流中非常不便, 因此提出了Unicode字符集

它固定使用16 bits(两个字节、一个字)来表示一个字符,共可以表示65535个字符,将世界上

所有语音常用字符都收录其中,(Unicode标准称为UTF-16),后来为了能使双字节的Unicode

能够在现存的处理单字节系统上正确传输,出现了UTF-8,使用MBCS的方式对Unicode进行编码.

UTF-8是编码,它属于Unicode字符集,

5.Windows定义了一些数据类型

a.wchar_t 就是两个字节 带有W的都是这个类型

b.WCHAR Unicode字符 他其实就是wchar_t

c.PWSTR 指向Unicode字符串的指针 wchar_t *

d.PCWSTR 指向一个常量的Unicode const wchar_t *

e.对应多字节的类型为 CHAR,LPSTR,LPCSTR

f.ASNL/Unicode通用数据类型,

TCAHR 多字符集中为char, Unicode中为wchar_t

PTSTR 多字符集中为char *, Unicode中为wchar_t *

LPCTSTR 多字符集中为const char *, Unicode中为const wchar_t *

f.带有A就是多字符集, W就是Unicode(款字符),T就是通用的

7.Windows中多字符集和Unicode相互转化的API

a.WideCharToMultiByte 映射一个Unicode字符串到多字节字符串

b.MultiByteToWideChar 映射一个多字节字符串到Unicode字符串


8.函数 使用上面的函数比较复杂  则可以使用下面的宏函数

使用之前要先声明标识符 USES_CONVERSION;

A2W: 将多字节 转 宽字节

USES_CONVERSION
CString str;
char* AChar = "abcdefg";
wchar_t* WChar = A2W(AChar); 
str = WChar;

W2A: 将款字节 转 多字节

USES_CONVERSION;
wchar_t* AChar = L"abcdefg啊";
char* WChar = W2A(AChar);

T2A: T代表跟随系统 转 多字节

USES_CONVERSION;  
char * pChar="char to cstring";  
CString cTemp=A2T(pChar);

T2W: 系统类型 转 款字节

SES_CONVERSION;  
CString cTemp =_T("char to cstring");  
char * pChar=A2T(pChar);

9.谨慎使用上面的宏函数转换

a.如果你在一个循环里使用这个函数 可能会引起堆栈溢出

因为你查看代码发现他函数里面会调用alloc申请内存,他会在函数的栈中分配,

VC编译器默认是2M,在一个循环中调用这个函数就会一直分配内存.

b.解决办法最好是使用 WideCharToMultiByte  MultiByteToWideChar

这两个API,  把这两个API封装一下, 使用就很方便了.

10.使用THAR _TEXT 可以同时适应Unicode和多字节字符集

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:Windows核心编程(3)字符编码详解-创新互联
标题来源:http://azwzsj.com/article/cdgoje.html