规范化编程: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的使用相关推荐

  1. 《windows核心编程系列》二谈谈ANSI和Unicode字符集

    第二章:字符和字符串处理 使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是 ...

  2. Ansi与Unicode及慎用W2A等

    2019独角兽企业重金招聘Python工程师标准>>> Ansi与Unicode简要说明及各自的优缺点 他们是两种字符的编码格式,Ansi=窄字节,Unicode=宽字节,Ansi用 ...

  3. Ansi与Unicode编码

    视频教程: Ansi与Unicode编码 大家在编程时经常遇到的数据类型: ● Ansi: char   代表一个字符  (CHAR) char *  代表一个字符串指针   (PCHAR    PS ...

  4. vc驿站视频教程笔记2 ansi 和 unicode

    --------------------------------------------------------------------------- VC 驿站 WwW.CcTry.CoM 多抽出一 ...

  5. 为什么Windows编程都用UNICODE

    对于C++编程来说,无非ANSI和UNICODE,他们之间的区别这里就不赘述了,今天我们要说的士我为什么建议你用UNICODE进行编程. 1.有些基础的都应该知道,一般来说Windows函数都有两个版 ...

  6. C++中Ansi、Unicode、UTF8字符串之间的转换和写入

    转自: http://dark0729.blogbus.com/logs/51496111.html Ansi字符串我们最熟悉,英文占一个字节,汉字2个字节,以一个\0结尾,常用于txt文本文件 Un ...

  7. ANSI,ASCII,UNICODE

    转载:http://blog.csdn.net/zj510/article/details/38368397 一直以来,编码问题都是比较令人纠结的,我自己也是,迷惑了好一段时间. 首先看一下ANSI编 ...

  8. ANSI,ASCII,Unicode的区别与联系

    为什么80%的码农都做不了架构师?>>>    ANSI,ASCII,Unicode的区别与联系 http://wenku.baidu.com/view/01d596e3524de5 ...

  9. Ansi、Unicode、UTF8字符串之间的转换和写入文本文件

    转载请注明出处http://www.cppblog.com/greatws/archive/2008/08/31/60546.html 最近有人问我关于这个的问题,就此写一篇blog Ansi字符串我 ...

最新文章

  1. python 虚拟环境 tensorflow GPU
  2. SQLite入门与分析(二)---设计与概念
  3. 刘强东:第四次零售革命意义将超互联网
  4. AI:一张高清长图教你读懂AI简史《1308年 → 至今》
  5. 小米拒绝权限_小米手机MIUI12真有那么好吗?
  6. java 数据对象_java的几种对象(PO,VO,DAO,BO,POJO)
  7. 飞秋下载2010正式版_飞秋下载
  8. 【升级包】jeecg_online 支持主子表列表展示风格模板升级包,简易升级
  9. 安卓加java完成登录_从零学习安卓自动化(java+appium方向):完成登录操作+一个主流程(四)...
  10. ArrayList 实现原理及源码解析(jdk8 底层⽤的是数组)
  11. Jquery调用Web Service
  12. Azure Services Bus(服务总线)中的工作流(workflow)
  13. 【概率论】标准正态分布及概率表
  14. 算法学习笔记(使用追赶法解三对角方程组)
  15. 社区保密计算机使用制度,社区保密工作制度
  16. 河南城建学院的计算机科学与技术,河南城建学院计算机科学与工程系
  17. [bzoj1406][数论]密码箱
  18. Pandas读取csv
  19. oracle没commit有日志吗,commit操作是否一定会被记录到redo等问题的研究
  20. EKL构造点和线的基本用法

热门文章

  1. 互联网晚报 | 2月28日 星期一 |​工信部:最大限度降低缺芯影响;​工信部:今年新建5G基建60万个...
  2. 2021年中国电子签名行业研究报告
  3. pandas读取excel带汉字的列头_Pandas在读取csv时如何设置列名--常用方法集锦
  4. 信息与数据科学国际会议征文通知
  5. 作者:黄宜华,南京大学计算机系教授、博士生导师,中国计算机学会大数据专家委员会委员、副秘书长。...
  6. HashMap暴力枚举(洛谷P1765题题解,Java语言描述)
  7. C++学习笔记系列二
  8. 查询各个科目成绩前三的记录
  9. Java并发编程,Condition的await和signal等待通知机制
  10. MySQL的几个character_set变量的说明