什么是C语言中的宽字符与多字节字符
双击此处修改或者 精品资源,临风文档h。ttp://www.docin.com/a feiz精品资源,临风文档h。ttp://www.docin.com/afeiz []删除页眉页脚信息
什么是C语言中的宽字符与多字节字符
C语言原本是在英文环境中设计的~主要的字符集是7位的ASCII码~8位的byte,字节,是最常见的字符编码单位。但是国际化软件必须能够表示不同的字符~而这些字符数量庞大~无法使用一个字节编码。
C95
化了两种表示大型字符集的方法:宽字符,wide character~该字符集内每个字符使用相同的位长,以及多字节字符,multibyte character~每个字符可以是一到多个字节不等~而某个字节序列的字符值由字符串或流,stream,所在的环境背景决定,。
自从1994年的增补之后~C语言不只提供char类型~还提供wchar_t类型,宽字符,~此类型定义在stddef.h 头文件中。wchar_t指定的宽字节类型足以表示某个实现版本扩展字符集的任何元素。
在多字节字符集中~每个字符的编码宽度都不等~可以是一个字节~也可以是多个字节。源代码字符集和运行字符集都可能包含多字节字符。多字节字符可以被用于字符的常量、字符串字面值,string literal,、标识符,identifier,、注释,comment,~以及头文件。
C语言本身并没有定义或指定任何编码集合~或任何字符集,基本源代码字符集和基本运行字符集除外,~而是由其实
1
双击此处修改或者 精品资源,临风文档h。ttp://www.docin.com/a feiz精品资源,临风文档h。ttp://www.docin.com/afeiz []删除页眉页脚信息
现指定如何编码宽字符~以及要支持什么类型的多字节字符编码机制。
虽然C标准没有支持Unicode字符集~但是许多实现版本使用Unicode转换格式UTF-16和UTF-32来处理宽字符。如果遵循Unicode标准~wchar_t类型至少是16或32位长~而wchar_t类型的一个值就代表一个Unicode字符。
UTF-8是一个由Unicode CONsortium,万国码联盟,定义的实现~可以表示Unicode字符集的所有字符。UTF-8字符所使用的空间大小从一个字节到四个字节都有可能。
多字节字符和宽字符,也就是wchar_t,的主要差异在于宽字符占用的字节数目都一样~而多字节字符的字节数目不等~这样的表示方式使得多字节字符串比宽字符串更难处理。比方说~即使字符'A'可以用一个字节来表示~但是要在多字节的字符串中找到此字符~就不能使用简单的字节比对~因为即使在某个位置找到相符合的字节~此字节也不见得是一个字符~它可能是另一个不同字符的一部分。然而~多字节字符相当适合用来将文字存储成文件。
C提供了一些标准函数~可以将多字节字符转换为wchar_t~或将宽字符转换为多字节字符。比方说~如果C 编译器使用Unicode 标准的UTF-16 和UTF-8~那么下面调用wctomb()函数就可以获得字符的多字节表示方式,注:wctomb = wide character to multibyte,。
2