规范化编程:ANSI和UNICODE的使用
规范化编程:ANSI和UNICODE的使用
到底什么是ANSI,什么是UNICODE呢?其实这是两种不同的编码方式标准,ANSI中的字符采用8bit,而UNICODE中的字符采用16bit。8bit的ANSI编码只能表示256种字符,表示26个英文字母是绰绰有余的,但是表示汉字,韩国语,日语等有着成千上万个字符的非西方字符肯定就不够了,正是如此才引入了UNICODE标准。
在软件开发中,特别是使用C语言的一些有关字符串处理的函数,ANSI和UNICODE是区分是用的,那么ANSI类型的字符和UNICODE类型的字符如何定义,如何使用呢?ANSI和UNICODE又如何转换呢?
一.定义部分:
ANSI: char str[1024]; 可用字符串处理函数:strcpy( ), strcat( ), strlen( )等等。UNICODE:wchar_t str[1024];可用字符串处理函数
二.可用函数:
ANSI:即 char, 可用字符串处理函数:strcat( ),strcpy( ), strlen( )等以str打头的函数。
UNICODE:即wchar_t 可用字符串处理函数:wcscat(),wcscpy(),wcslen()等以wcs打头的函数。
三.系统支持
Windows 98 :只支持ANSI。
Windows 2k :既支持ANSI又支持UNICODE。
Windows CE :只支持UNICODE。
说明
1. 在COM里面只支持UNICODE。
2. Windows 2000整个OS系统都是基于UNICODE的,为此在windows 2000下使用ANSI是需要付出代价的,虽然在编码上不用任何的转换,但是这种转化是隐藏的,是占用系统资源的(CPU,内存)。
3. 在Windows 98下必须使用UNICODE,则需要自己手动的编码切换。
三.如何区分:
在我们软件开发中往往需要即支持ANSI又支持UNICODE,不可能在要求类型转换的时候,重新改变字符串的类型,和使用于字符串上的操作函数。为此, 标准的C 运行期库和Windows 提供了宏定义的方式。
在C语言里面提供了 _UNICODE宏(有下划线),在Windows里面提供了UNICODE宏(无下划线),只要定了_UNICODE宏和UNICODE宏,系统就会自动切换到UNICODE版本,否则,系统按照ANSI的方式进行编译和运行。
只定义了宏并不能实现自动的转换,他还需要一系列的字符定义支持。
1. TCHAR
如果定义了UNICODE宏则TCHAR被定义为wchar_t。
typedef wchar_t TCHAR;
否则TCHAR被定义为char
typedef char TCHAR;
2. LPTSTR
如果定义了UNICODE宏则LPTSTR被定义为LPWSTR。
typedef LPTSTR LPWSTR;
否则TCHAR被定义为char
typedef LPTSTR LPSTR;
说明: 在使用字符串常量的时候需要使用_TEXT(“MyStr”)来支持系统的自动转换。
规范化编程:ANSI和UNICODE的使用相关推荐
- 《windows核心编程系列》二谈谈ANSI和Unicode字符集
第二章:字符和字符串处理 使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是 ...
- Ansi与Unicode及慎用W2A等
2019独角兽企业重金招聘Python工程师标准>>> Ansi与Unicode简要说明及各自的优缺点 他们是两种字符的编码格式,Ansi=窄字节,Unicode=宽字节,Ansi用 ...
- Ansi与Unicode编码
视频教程: Ansi与Unicode编码 大家在编程时经常遇到的数据类型: ● Ansi: char 代表一个字符 (CHAR) char * 代表一个字符串指针 (PCHAR PS ...
- vc驿站视频教程笔记2 ansi 和 unicode
--------------------------------------------------------------------------- VC 驿站 WwW.CcTry.CoM 多抽出一 ...
- 为什么Windows编程都用UNICODE
对于C++编程来说,无非ANSI和UNICODE,他们之间的区别这里就不赘述了,今天我们要说的士我为什么建议你用UNICODE进行编程. 1.有些基础的都应该知道,一般来说Windows函数都有两个版 ...
- C++中Ansi、Unicode、UTF8字符串之间的转换和写入
转自: http://dark0729.blogbus.com/logs/51496111.html Ansi字符串我们最熟悉,英文占一个字节,汉字2个字节,以一个\0结尾,常用于txt文本文件 Un ...
- ANSI,ASCII,UNICODE
转载:http://blog.csdn.net/zj510/article/details/38368397 一直以来,编码问题都是比较令人纠结的,我自己也是,迷惑了好一段时间. 首先看一下ANSI编 ...
- ANSI,ASCII,Unicode的区别与联系
为什么80%的码农都做不了架构师?>>> ANSI,ASCII,Unicode的区别与联系 http://wenku.baidu.com/view/01d596e3524de5 ...
- Ansi、Unicode、UTF8字符串之间的转换和写入文本文件
转载请注明出处http://www.cppblog.com/greatws/archive/2008/08/31/60546.html 最近有人问我关于这个的问题,就此写一篇blog Ansi字符串我 ...
最新文章
- python 虚拟环境 tensorflow GPU
- SQLite入门与分析(二)---设计与概念
- 刘强东:第四次零售革命意义将超互联网
- AI:一张高清长图教你读懂AI简史《1308年 → 至今》
- 小米拒绝权限_小米手机MIUI12真有那么好吗?
- java 数据对象_java的几种对象(PO,VO,DAO,BO,POJO)
- 飞秋下载2010正式版_飞秋下载
- 【升级包】jeecg_online 支持主子表列表展示风格模板升级包,简易升级
- 安卓加java完成登录_从零学习安卓自动化(java+appium方向):完成登录操作+一个主流程(四)...
- ArrayList 实现原理及源码解析(jdk8 底层⽤的是数组)
- Jquery调用Web Service
- Azure Services Bus(服务总线)中的工作流(workflow)
- 【概率论】标准正态分布及概率表
- 算法学习笔记(使用追赶法解三对角方程组)
- 社区保密计算机使用制度,社区保密工作制度
- 河南城建学院的计算机科学与技术,河南城建学院计算机科学与工程系
- [bzoj1406][数论]密码箱
- Pandas读取csv
- oracle没commit有日志吗,commit操作是否一定会被记录到redo等问题的研究
- EKL构造点和线的基本用法
热门文章
- 互联网晚报 | 2月28日 星期一 |​工信部:最大限度降低缺芯影响;​工信部:今年新建5G基建60万个...
- 2021年中国电子签名行业研究报告
- pandas读取excel带汉字的列头_Pandas在读取csv时如何设置列名--常用方法集锦
- 信息与数据科学国际会议征文通知
- 作者:黄宜华,南京大学计算机系教授、博士生导师,中国计算机学会大数据专家委员会委员、副秘书长。...
- HashMap暴力枚举(洛谷P1765题题解,Java语言描述)
- C++学习笔记系列二
- 查询各个科目成绩前三的记录
- Java并发编程,Condition的await和signal等待通知机制
- MySQL的几个character_set变量的说明