MFC之多字节和宽字节的总结
ANSI字符集 所支持的就是多字节的也叫窄字节,类型来说就对应char类型。
Unicode字符集 也叫宽字符集 所支持的就是宽字符集,从类型上来说就是 wchar_t类型。
gb2312是中国的编码,Big5是中国香港和中国台湾的编码。
为什么有时我们所做的程序会出现乱码呢?
首先编码就是一个编码对应一个字符,gb2312 用2个字节表示所有的汉字,也就可能从0开始表示2^15个中文所用到的字符。
Big5也是用两个字节表示繁体字,也有可能是从0x0000 到0xFFFF区间表示繁体字。
因为编码的人只想编排自己地区所使用的字符,所以,在每个字节进行与字符对应的时候存在语言混淆的可能。
比如一个字简体的”国“和繁体的”國“,在gb2312中”国“字节编码是397A,在Big-5”國“是B0EA,那么这个简体的国如果不进行编码转换是无法从397A直接变成B0EA的,这个397A直接去对应Big-5的编码,就会是除了”國“字以外的其他繁体字了。那么gb2312的”国“用Big-5码显示出来就不是国对应的繁体字了。
所以就有了Unicode编码,它也叫统一编码。把全世界的语言字符拉通一一对应的编码。拉通就好比把全世界的字符通通从1开始数数 数一遍,并按数出来的数作为它的编码,这样就做到全世界的字符都是一 一对应的了。
那么繁体字,简体字,法文,俄文就不会有重叠的区域。这个时候“国”在unicode是 56EF表示,“國”是570B表示,如果生产者和用户都使用unicode编码,那么“国”和“國”就是因为使用的同一编码,生产者用unicode的56EF代表’国‘,用户用unicode翻译过来就是“国”;生产者用570B代表’國‘,用户用unicode翻译过来还是“國”,这就能编码和字符在生产者和用户上对应不变了。
在MFC中,ANSI字符集 所支持的就是多字节的也叫窄字节,类型来说就对应char类型。
Unicode字符集 也叫宽字符集 所支持的就是宽字符集,从类型上来说就是 wchar_t类型。
为了方便在不同的字符集上转换,就有了一种TCHAR类型,TCHAR能随着窄宽字节的变化自动变化。CString也是这样的。我们在定义CString的时候就需要使用的宏_T(“值”)或者TEXT(“值”)来表示文字了,这两个宏也是随编码不同,自动把里面的值转换成对应的编码。
区分一下 LPSTR(char*),LPCSTR(const char*)
LPWSTR(wchar_t*),LPCWSTR(const wchar_t*)
LPTSTR(TCHAR*),LPCTSTR(const TCHAR*)
它们之间的转换转换:
https://blog.csdn.net/u012175637/article/details/80632687
MFC之多字节和宽字节的总结的更多相关文章
- windows下多字节和宽字节转换
先简单说下什么是多字节和宽字节. 多字节是指使用多个字节(1-3)表示一个字符.比如gbk使用英文占一个字节,中文占2个,这个就是多字节了.utf-8是使用1-3个字节表示字符.还有big5等等. 宽 ...
- A2W和W2A :很好的多字节和宽字节字符串的转换宏
以前看<Window核心编程>,感觉多字节和宽字节之间还比较麻烦的,至少MultiByteToWideChar函数和WideCharToMultiByte函数有足够多的参数的意义让我们去理 ...
- 关于多字节、宽字节、WideCharToMultiByte和MultiByteToWideChar函数的详解
所谓的短字符,就是用8bit来表示的字符,典型的应用是ASCII码. 而宽字符,顾名思义,就是用16bit表示的字符,典型的有UNICODE. **************************** ...
- 使用Unicode(宽字节字符集);多字节字符集中定义宽字节变量
2012-03-25 14:54 (分类:计算机程序) 2.2 宽字符和C 宽字符不一定是Unicode.Unicode是宽字符集的一种.然而,因为本书的焦点是Windows而不是C执行的理论,所以书 ...
- PHP函数 addslashes() 和 mysql_real_escape_string() 的区别 && SQL宽字节,绕过单引号注入攻击
首先:不要使用 mysql_escape_string(),它已被弃用,请使用 mysql_real_escape_string() 代替它. mysql_real_escape_string() 和 ...
- 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 5.全局防护Bypass之宽字节注入
0x01 背景 首先我们了解下宽字节注入,宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而导致的注入漏洞.具体原 ...
- Mysql宽字节注入(转)
尽管现在呼吁所有的程序都使用unicode编码,所有的网站都使用utf-8编码,来一个统一的国际规范.但仍然有很多,包括国内及国外(特别是非英语国家)的一些cms,仍然使用着自己国家的一套编码,比如g ...
- 一文读懂所有的编码方式(UTF-8、GBK、Unicode、宽字节...)
编码方式就分两类:ANSI编码.Unicode编码.这两类编码都兼容ASC码. ------------------------------------------------------------ ...
- sqli-libs(32-37(宽字节注入)关)
补充知识:宽字节注入 定义:GB2312.GBK.GB18030.BIG5.Shift_JIS等这些都是常说的宽字节,实际上只有两字节.宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象,即将 ...
- SQL注入--宽字节注入
PHP测试代码: <?php // 面向对象写法 $id=addslashes($_GET[‘id’]); //获取id并转义预定义字符 // /$id=$_GET[‘id’]; $mysqli ...
随机推荐
- 1、android Studio 打Jar包
1.创建一个AndroidStudio 工程 注意下面这个Package Name 2.进入Android Studio工程中 选择Project Flies 选项 然后找到 app->src- ...
- 抓包整理————tcp 三次握手[九]
前言 简单抓包一下3次握手. 正文 握手的目标: 同步sequence 序列化 初始化序列化ISN(Initial Sequence Number) 交换tcp 通信参数 如MSS.窗口比例因子.选择 ...
- js es6 map weakmap
前言 这里介绍一些map和weakmap的一些属性和他们不同之处. 正文 map JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键.这 ...
- WPF随笔收录-RestSharp下载文件406问题
一.前言 在项目开发过程中,涉及到通过http下载文件的需求,最近遇到一个406问题,由于第一次接触这个问题,也被问题卡了好久,在网上风暴了很久才找到解决办法: 二.解决方法 解决的办法就是在requ ...
- Go语言打印九九乘法表,这是整洁代码范例
Go语言打印九九乘法表,这是整洁代码范例 / Go 语言输出九九乘法表 / 九九乘法表是我们学习编程时的一项基本练习,它看似简单,通过实现输出九九乘法表可以加深对 Go 语言循环结构的理解和运用. 本 ...
- 技术人如何"结构化"高效思考?
1 前言 你是否在解决问题时,常常觉得脑子很乱,很多零散的信息迸发出来,但就是无法形成解决方案. 之所以这样,原因就在于,我们的大脑处理不了太多零散而复杂的信息.人类大脑在处理信息的时候,有两个规律: ...
- 全方位事件监控管理,阿里云日志服务Kubernetes事件中心正式上线
2020年2月21日,阿里云日志服务Kubernetes事件中心正式上线,为Kubernetes事件提供集中化采集.存储.分析.可视化.告警等能力,帮助Kubernetes使用者快速构建准实时.高可靠 ...
- 【云原生】拿下 Gartner 容器产品第一,阿里云打赢云原生关键一战!
近日,Gartner 发布 2020 年公共云容器报告,据报告显示,阿里云和 AWS 拥有最丰富的产品布局,覆盖 9 项产品能力,并列排名第一. 据 Gartner 分析师评论,阿里云拥有丰富的容器产 ...
- 打通JAVA与内核系列之一ReentrantLock锁的实现原理
简介:写JAVA代码的同学都知道,JAVA里的锁有两大类,一类是synchronized锁,一类是concurrent包里的锁(JUC锁).其中synchronized锁是JAVA语言层面提供的能力 ...
- 重温设计模式之 Factory
简介: 创建型模式的核心干将,工厂.简单工厂.抽象工厂,还记得清么,一文回顾和对比下. 作者 | 弥高来源 | 阿里技术公众号 前言 创建型模式的核心干将,工厂.简单工厂.抽象工厂,还记得清么,一文回 ...