博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Windows程序设计】Unicode简介
阅读量:5277 次
发布时间:2019-06-14

本文共 1039 字,大约阅读时间需要 3 分钟。

  • 字符的发展史

1、最初的字符集ASCII码,128个字符。

2、扩展ASCII码,共有256个字符。

3、双字节字符集(DBCS:double-byte character set)。DBCS从256编码开始,最初的128个代码是ASCII,较高的128个代码中的某些总是跟随着第二个字节。这两个字节一起(称作首字节和跟随字节)定义一个字符,通常是一个复杂的象形文字。双字符集问题并不是说字符由两个字节代表。问题在于一些字符(特别是ASCII字符)由1个字节表示,而另一些字符由两个字节表示。

4、Unicode编码中每个字符占用16个字节,它是一套全球化的编码方案,包括世界上所有的象形符号。然而Unicode编码的问题在于每个字符占用两个字节的空间在某些情况下非常浪费。

因此,有些时候我们希望维护统一的原始程序,它能根据某项标识进行ASCII码编译,也能进行Unicode码编译。在windows编程中,提供了TCHAR.H头文件,它为我们提供了这项功能。

  • 宽字符

ANSI C支持8位的character集,也支持16位的宽字符集。宽字符集并不是unicode,unicode是一种宽字符集。

在C语言中,有如下的几种定义字符的方式,它们需要的存储空间如下所示:

char c = 'A';     //c需要一个字节的存储单元。

wchar_t c = 'A';    //c需要两个字节的存储单元

wchar_t * p = L"Hello!";  //p需要四个字节的存储单元,L告诉编译器字符串按宽字符集保存,占14个字节存储,其中包含6个宽字符,和1个2位的0字符

针对宽字符的库函数示例:

char * pc = "Hello!";

iLength = strlen(pc);    //可知iLength等于6

wchar_t * pw = L"Hello!";

iLength = wcslen(pw);   //iLength等于6

  • 宽字符与Windows

若想明确定义8位字符变量和字符串,使用CHAR, PCHAR;

若想明确定义16位字符变量和字符串,使用WCHAR, PWCHAR,并使用L标识字符串;

对于使用8位还是16位字符,取决于UNICODE标识符的定义,此时字符变量和字符串的定义使用TCHAR, PTCHAR,以及TEXT宏。

转载于:https://www.cnblogs.com/qi09/archive/2012/03/01/2362006.html

你可能感兴趣的文章
中文系统 上传file的input显示英文
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
exit和return的区别
查看>>
【hdu 1429】胜利大逃亡(续)
查看>>
P1192-台阶问题
查看>>
Java大数——a^b + b^a
查看>>
简单的数据库操作
查看>>
帧的最小长度 CSMA/CD
查看>>
树状数组及其他特别简单的扩展
查看>>
普通求素数和线性筛素数
查看>>
PHP截取中英文混合字符
查看>>
电子眼抓拍大解密
查看>>
51nod1076 (边双连通)
查看>>
Linux pipe函数
查看>>
java equals 小记
查看>>
2019春 软件工程实践 助教总结
查看>>
Zerver是一个C#开发的Nginx+PHP+Mysql+memcached+redis绿色集成开发环境
查看>>
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>