一、字符编码 详细介绍

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)字符编码详解相关推荐

  1. 字符编码详解及由来(UNICODE,UTF-8,GBK)

    字符编码详解及由来(UNICODE,UTF-8,GBK) 各种字符编码方式详解及由来(ANSI,UNICODE,UTF-8,GB2312,GBK) - 2009-01-29 09:53     一直对 ...

  2. Python2.7字符编码详解

    Python2.7字符编码详解 目录 Python2.7字符编码详解 声明 一. 字符编码基础 1.1 抽象字符清单(ACR) 1.2 已编码字符集(CCS) 1.3 字符编码格式(CEF) 1.3. ...

  3. 转1:Python字符编码详解

    Python27字符编码详解 声明 一 字符编码基础 1 抽象字符清单ACR 2 已编码字符集CCS 3 字符编码格式CEF 31 ASCII初创 311 ASCII 312 EASCII 32 MB ...

  4. Python字符编码详解

    Python字符编码详解 转自http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html Python字符编码详解 本文简单介绍了各种常用的 ...

  5. 可能是最详细的字符编码详解

    Created By JishuBao on 2019-04-02 12:38:22 Recently revised in 2019-04-03 12:38:22   欢迎大家来到技术宝的掘金世界, ...

  6. 字符编码详解及利用C++ STL string遍历中文字符串

    作者:非妃是公主 专栏:<笔记><C++> 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成.--曾国藩 文 ...

  7. java字符编码详解_Java中字符编码格式详解

    一.前言 在分析Comparable和Comparator的时候,分析到了String类的compareTo方法,String底层是用char[]数组来存放元素,在比较的时候是比较的两个字符串的字符, ...

  8. 字符、字符集和字符编码详解(一文扫清疑惑)

    前言 字符.字符集和字符编码时常看见,之前也看过一些博文,看得迷迷糊糊地,看过即忘,今天有幸碰到一篇能让我醍醐灌顶的文章,整理一下相关知识点与大家分享! 原博文地址:字符集编码详解(学习,看一篇就够了 ...

  9. Spark核心编程系列(一)——RDD详解

    目录 Spark核心编程系列--RDD详解(一) RDD概念 RDD与IO之间的关系 RDD的核心属性 RDD执行原理 基础编程 RDD创建 RDD的并行度与分区 参考 Spark核心编程系列--RD ...

最新文章

  1. GC分析工具使用-gceacy分析堆栈
  2. J - 数据结构实验:哈希表
  3. shell脚本应用(二)
  4. DNS解析原理与Bind部署DNS服务
  5. 爆料称配备更大屏幕尺寸的Apple Silicon版iMac仍在研发中
  6. 如何利用大数据打造智慧交通
  7. [FZYZOJ 1889] 厨房救济
  8. 两年前疫情刚开始时写的手机上的悬浮贴图软件:悬浮便利贴 - 在手机屏幕上贴图、贴文字
  9. 同比 数据模型 环比_同比和环比计算公式?
  10. AndroidUI:Android的Holo Theme
  11. 离群值是什么意思_医学数据如果存在离群值应如何处理?spss箱式图解决——【杏花开医学统计】...
  12. 嵌入式系统开发笔记17:CJ/T-188 冷热量表协议解析6
  13. day55 虚拟机 centos linux命令 搭建linux架构师必背命令
  14. O2O、C2C、B2B、B2C是什么意思 有什么区别
  15. Redis介绍与安装
  16. mysql 批量造假数据
  17. 软件工程 -- 程序流程图
  18. 联想R7000P莫名其妙黑屏问题记录
  19. java mail 附件 dat,邮件附件winmail.dat文件的正确打开姿势
  20. Spring之初见端倪——配置篇

热门文章

  1. 漫画:如何给女朋友解释什么是删库跑路?
  2. 如何一眼识别蚂蚁集团身价千万的阿里人
  3. dubbo 扩展单例的保存
  4. IOS10 APP安装后打开不提示是否允许使用数据
  5. How to use nheqminer in RedHat based systems (CentOS/Fedora)
  6. 一对一培训之视频免费分享-2018-01-21-第 03 阶段-准备-基础-架构-01
  7. javabean与map的转换
  8. 兴趣部落的 Git 迁移实践
  9. PHP删除数组(array一维)中指定的某个值 (转)
  10. 【转载】C#编码标准━━项目设置和项目结构