Windows核心编程(3)字符编码详解
一、字符编码 详细介绍
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和多字节字符集
转载于:https://blog.51cto.com/12158490/2093481
Windows核心编程(3)字符编码详解相关推荐
- 字符编码详解及由来(UNICODE,UTF-8,GBK)
字符编码详解及由来(UNICODE,UTF-8,GBK) 各种字符编码方式详解及由来(ANSI,UNICODE,UTF-8,GB2312,GBK) - 2009-01-29 09:53 一直对 ...
- Python2.7字符编码详解
Python2.7字符编码详解 目录 Python2.7字符编码详解 声明 一. 字符编码基础 1.1 抽象字符清单(ACR) 1.2 已编码字符集(CCS) 1.3 字符编码格式(CEF) 1.3. ...
- 转1:Python字符编码详解
Python27字符编码详解 声明 一 字符编码基础 1 抽象字符清单ACR 2 已编码字符集CCS 3 字符编码格式CEF 31 ASCII初创 311 ASCII 312 EASCII 32 MB ...
- Python字符编码详解
Python字符编码详解 转自http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html Python字符编码详解 本文简单介绍了各种常用的 ...
- 可能是最详细的字符编码详解
Created By JishuBao on 2019-04-02 12:38:22 Recently revised in 2019-04-03 12:38:22 欢迎大家来到技术宝的掘金世界, ...
- 字符编码详解及利用C++ STL string遍历中文字符串
作者:非妃是公主 专栏:<笔记><C++> 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成.--曾国藩 文 ...
- java字符编码详解_Java中字符编码格式详解
一.前言 在分析Comparable和Comparator的时候,分析到了String类的compareTo方法,String底层是用char[]数组来存放元素,在比较的时候是比较的两个字符串的字符, ...
- 字符、字符集和字符编码详解(一文扫清疑惑)
前言 字符.字符集和字符编码时常看见,之前也看过一些博文,看得迷迷糊糊地,看过即忘,今天有幸碰到一篇能让我醍醐灌顶的文章,整理一下相关知识点与大家分享! 原博文地址:字符集编码详解(学习,看一篇就够了 ...
- Spark核心编程系列(一)——RDD详解
目录 Spark核心编程系列--RDD详解(一) RDD概念 RDD与IO之间的关系 RDD的核心属性 RDD执行原理 基础编程 RDD创建 RDD的并行度与分区 参考 Spark核心编程系列--RD ...
最新文章
- GC分析工具使用-gceacy分析堆栈
- J - 数据结构实验:哈希表
- shell脚本应用(二)
- DNS解析原理与Bind部署DNS服务
- 爆料称配备更大屏幕尺寸的Apple Silicon版iMac仍在研发中
- 如何利用大数据打造智慧交通
- [FZYZOJ 1889] 厨房救济
- 两年前疫情刚开始时写的手机上的悬浮贴图软件:悬浮便利贴 - 在手机屏幕上贴图、贴文字
- 同比 数据模型 环比_同比和环比计算公式?
- AndroidUI:Android的Holo Theme
- 离群值是什么意思_医学数据如果存在离群值应如何处理?spss箱式图解决——【杏花开医学统计】...
- 嵌入式系统开发笔记17:CJ/T-188 冷热量表协议解析6
- day55 虚拟机 centos linux命令 搭建linux架构师必背命令
- O2O、C2C、B2B、B2C是什么意思 有什么区别
- Redis介绍与安装
- mysql 批量造假数据
- 软件工程 -- 程序流程图
- 联想R7000P莫名其妙黑屏问题记录
- java mail 附件 dat,邮件附件winmail.dat文件的正确打开姿势
- Spring之初见端倪——配置篇