问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

什么是C语言中的宽字符与多字节字符

发布网友 发布时间:2022-05-01 19:39

我来回答

1个回答

热心网友 时间:2022-06-22 02:15

C 语言原本是在英文环境中设计的,主要的字符集是7 位的ASCII 码。从此开始,8 位的byte(字节)变成最常见的字符编码单位,但是国际化软件必须能够表示不同的字符,而这些字符数量庞大,无法使用一个字节编码,于是世界上使用各式 各样多字节的字符编码集合已经有数十年了,比如用来表示“非拉丁字母”以及“非字母”的中、日、韩文字系统。在1994 年,“Normative Addenm 1”(基准增补一)的采用,让ISO C 可以标准化两种表示大型字符集的方法:宽字符(wide character,该字符集内每个字符使用相同的位长)以及多字节字符(multibyte character,每个字符可以是一到多个字节不等,而某个字节序列的字符值由字符串或流(stream)所在的环境背景决定)。
注 意: 虽然C现在提供抽象机制,可以处理和转换不同种类的编码集合,但语言本身并没有定义或指定任何编码集合,或任何字符集(除前一节提到的基本源代码字符集和 基本运行字符集外)。换句话说,这部分是由个别的实现版本指定如何编码宽字符,以及要支持什么类型的多字节字符编码机制。
自从1994 年的增补之后,C 不只提供char类型,还提供wchar_t类型(宽字符),此类型定义在stddef.h 头文件中。wchar_t 类型足以表示某个实现版本扩展字符集的任何元素。
虽然C 标准没有支持Unicode 字符集,许多实现版本使用Unicode 转换格式UTF-16 和UTF-32(参考http://www.unicode.org) 来处理宽字符。Unicode 标准和ISO/IEC 10646标准相当接近,而且是许多既有字符集(包括7 位的ASCII)的超集。如果遵循Unicode标准,wchar_t类型至少是16或32位长,而wchar_t类型的一个值就代表一个Unicode 字符。
在多字节字符集中,每 个字符的编码宽度都不等,可以是一个字节,也可以是多个字节。源代码字符集和运行字符集都可能包含多字节字符,如果真的包含多字节字符的话,那么基本字符 集中的每个字符都只会占用一个字节(完全没有多字节的字符),空字符是唯一的例外,空字符可能会占用任意个数的字节(但这些字节内全部的位都必须为0)。 多字节字符可以被用于字符的常量、字符串字面值(string literal)、标识符(identifier)、注释(comment),以及头文件。许多的多字节字符集被设计来支持特定国家的语言,例如JIS 字符集(日本业界标准,Japanese Instrial Standard)。多字节UTF-8 字符集是由Unicode Consortium(万国码联盟)定义的,可以表示Unicode 字符集的所有字符。
UTF-8 字符所使用的空间大小从一个字节到四个字节都有可能。多字节字符和宽字符(也就是wchar_t)的主要差异在于宽字符占用的字节数目都一样,而多字节字符的字节数目不等,这样的表示方式使得多字节字符串比宽字符串更难处理。
比 方说,即使字符'A'可以用一个字节来表示,但是要在多字节的字符串中找到此字符,就不能使用简单的字节比对,因为即使在某个位置找到相符合的字节,此字 节也不见得是一个字符,它可能是另一个不同字符的一部分。然而,多字节字符相当适合用来将文字存储成文件(参见第13 章)。
C 提供了一些标准函数,可以将多字节字符转换为wchar_t,或将宽字符转换为多字节字符。比方说,如果C 编译器使用Unicode 标准的UTF-16 和UTF-8
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
泰勒公式有哪些常见形式? 空调室内风机怎样工作 什么是县级以上医院 关于聚金宝 买白银问题 平安银行个人贵金属交易业务有哪些? 网易云音乐为什么歌这么少? 公路边种的有什么花 高速路上常用的绿化花卉有那些? 公路绿化用什么花 我一键开核后顺利进入WIN7 系统,可是一开网站就重启是怎么回事,我开6... 宽字符的定义 中国国学是什么 三千小童国学馆怎么样? 姓轩辕的名人 北京国学家长研讨论坛,如何联系老百姓国学参与 姓轩辕的名人有谁 华东师大公共必修课如国史纲要国学原典之类算不算绩点 国学中的“别集”有哪些主要原典? 目前还在世的国学大师有哪些 一位国学大师究竟是怎样炼成的 “中国国学”是什么? 乙卯,方国珍谴使奉书献金带于吴出自哪有下文吗 请问“国学”的具体定义和主要内容都是什么吗?中国的国学大师都有谁呢? 五年级国学经典孟子一共多少章? 什么是国学原典 信小呆真人出镜!中大奖之后该如何保持初心? 魔镜慧眼监控有陌生号登录账号怎样控制魔镜慧眼监控只有陌生号码... 魔镜物语首充号会被封吗 美的空调在制热时, 内机为什么会一阵一阵的发出吱吱响的声音啊? VR资源哪里能找到 什么叫多字节,什么又叫宽字符 苹果手机里的通话记录的日期能改吗? C语言怎么输入和输出宽字符 printf如何输出宽字符 vc2013中的宽字符如何定义 苹果6P手机在那里设置设置通话限时? 宽字符问题 宽字符的介绍 什么是宽字符,GBK汉字占2个字节算不算宽字符呢? 请问C++中的宽字符是什么意思,宽字符串又是怎么用?谢谢了 c语言,宽字符串字面值是什么意思? 在C语言中怎么打出宽字符呢? 宽字符常量是什么,加个L有什么作用? windows 宽字节 什么编码 宽字符数组wchar_t的用法 电费太高,这几个省电妙招送给你? cout也能输出宽字符例如中文,为什么还要用wcout? C++中字符型和宽字符型有什么区别? 宽字符,unicode用在什么地方 盘点那些奇葩馅儿的饺子,你吃过哪几种?味道如何?