标签:MFC
一、字符编码 详细介绍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和多字节字符集
Windows核心编程(3)字符编码详解