A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wnk77521 中级黑马   /  2015-5-5 00:28  /  305 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.一共有三种字符集:单字节字符集single-byte charecter set(如ascii和扩展ascii),不定字节字符集multi-byte charecter set(如双字节字符集:Double-byte charecter set),wide-character set宽字符集(如Unicode);
2.windows 98由于是继承自16位操作系统的32位操作系统,而16位操作系统只使用ANSI编码,故windows98只支持ANSI编码,windows系统调用函数的参数都必须是ANSI编码;
     windows 2000是一个不同于windows 98的全新操作(即它是重新开发的),它的系统调用函数的参数只支持Unicode,但是它同时也通过一种间接转换来支持ANSI参数的系统调用,即当参数是ANSI时,操作系统会将ANSI转化为Unicode,然后将转换后的参数传给被调用的这个系统函数,同理,若这个系统函数返回值是ANSI,操作系统也会将Unicode转换为ANSI,然后传递这个返回值;因此说windows 2000是既支持ANSI也支持Unicode,但是使用ANSI会降低系统的性能;
     windows ce只支持Unicode;
3.C语言运行库(由微软提供的)也支持这3种字符集
ASCII的数据类型为char(winnt.h中有typedef char CHAR);
Unicode(既宽字符)的数据类型为wchar_t(在wchar.h,string.h中有typedef unsigned short wchar_t);
   string.h中同时支持ANSI和Unicode,当参数为ANSI的函数前缀是str,参数为Unicode的函数的前缀是wcs;微软提供的C语言运行库中默认的字符串是ANSI,即字符串"我们"采用的是ANSI,L"我们"才是Unicode;
3.可以利用TCHAR.h和宏_UNICODE来无区别的调用ANSI和UNICODE参数的函数,_T这个宏将根据是否定义了_UNICODE宏来自动在俩者之间转换,
#define __T(x)       L ## x
#define __T(x)       x
4.windows程序的库:windows.h,winnt.h,
   Microsoft提供的C语言运行库:TCHAR.h,string.h
   在windows程序的库中,Unicode的宏是UNICODE
   在Microsoft提供的C语言运行库中,Unicode的宏是_UNICODE
5.在c中,char代表字节数据类型;在java中,char代表字符数据类型(内存可能占一个或倆个字节),byte代表字节数据类型;
6.C中,字符串char *代表的是ansi编码,ansi不是一种确定的编码,那些所有使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在繁体中文系统下,ANSI 编码代表 BIG5 编码,在日文操作系统下,ANSI 编码代表 JIS 编码;
7.UNICODE 包含了各种语言里面所使用到的所有字符,并为每一个字符赋予了一个唯一的序号。不论在什么平台下,什么程序中,不论用在什么语言里,UNICODE 对同一个字符赋予的序号总是相同的。与其他“字符集”不同的是,“UNICODE”并不代表一种“编码”,只代表一个“字符的集合”。用来给 UNICODE 字符集编码的标准有很多种,比如:UTF-8, UTF-7, UTF-16, UnicodeLittle, UnicodeBig 等
8.在 UNICODE 被采用之前,计算机想要记录一段文字,内存中实际存放的内容是:按照指定编码规则得到的字节串。也就是按照 ANSI 编码方式存储在内存中的。比如:在中文 DOS, Windows 95, Windows 98 操作系统中,字符串 "中文123" 存放在内存中时,实际存放的是 [D6][D0][CE][C4][31][32][33] 这7个字节。('中' 和 '文' 分别占2个字节。)
    而在 UNICODE 被采用之后,计算机想要记录一段文字时,内存中不再存放根据特定编码而得到的字节串,而改为存放各个字符在 UNICODE 中的序号。比如:在 Windows NT/2000/XP, Linux, Java 系统中,字符串 "中文123" 存放在内存中时,实际记录的是 20013, 25991, 49, 50, 51 这5个序号。当不同语言中的字符需要同时表示时,不会因为编码冲突而无法表示。
    字符串实际所占内存空间的大小,要取决于当前系统采用多少字节来存放一个“序号”。如果使用2个字节存放一个序号,那么 "中文123" 在内存中就占10个字节。如果使用4个字节存放一个序号,那么 "中文123" 就占20个字节。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马