C&C++   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C语言中的字符串与字符集详解大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

字符集理论及应用详解

一、字符集和字符编码

1、定义

字符集(Character Set/Charset)是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。[1]简单来说,字符集就是一个表。这个表有两列,一列是各种字符,另一列是每个字符锁对应的编号。注意,字符集只是一个规则,或者说是标准。它只定义每个字符对应的编码,建立字符和数字的对应关系,而不存储每个字符的图像。存储字符图像的是字体文件。可以这样理解:字体文件中存了很多张图片,每一张图片都是一个字符的样子,同时每个图片都有自己的名字(可能不止一个),这个名字就是图片中的字符在字符集中的编码。

C语言中的字符串与字符集详解

图片可以看作是字体文件中的一个字符,名字可以看作是其对应的编码(这里是Unicode字符集指定的编码)

字符编码(Character Encoding)是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对。即在符号集合与数字系统之间建立对应关系,它是信息处理的一项基本技术。通常人们用符号集合(一般情况下就是文字)来表达信息。而以计算机为基础的信息处理系统则是利用元件(硬件)不同状态的组合来存储和处理信息的。元件不同状态的组合能代表数字系统的数字,因此字符编码就是将符号转换为计算机可以接受的数字系统的数,称为数字代码。[1]简单来说,字符编码就是表示字符的方法。例如,如何将字符集中字符自己的编号存在计算机中。

2、常见字符集

常见字符集有两大类,分别是ANSI和Unicode。其中aNSI又包含了很多具体的字符集,例如GB2312,BIG5,Shift-JIS等。

ANSI字符集:

ANSI编码包含了一系列字符集,所以准确来讲,它并不能被叫做一个字符集。但是由于技术原因(下面会讲),这一系列字符集同时只能使用一个,所以把整个ANSI编码称作ANSI字符集来讨论也没有什么大问题。ANSI字符集比Unicode字符集出现的早,它出现的目的是去解决当时ASCII编码不够用的情况。ASCII是美国当时造出来编码英文字符的一套系统,也可以算是一种字符集。最先它使用[0,0x7f]范围内的数字来编码英文字母,标点符号以及控制字符(例如空格,换行等)。后来又添加了一些拉丁字母和乱七八糟的东西,又使用了[0x80,0xff]范围内的数字来编码。这部分被叫做ASCII扩展表。总而言之,ASCII字符集使用[0,0xff]区间内的数字为字符编码,存储起来也只需要一个字节。

C语言中的字符串与字符集详解

ASCII基本表

C语言中的字符串与字符集详解

ASCII扩展表

然而,ASCII字符集仍然不能包含汉字字符。这事因为汉字真的太多了,[0,0xff]这个区间内只有255个数字,对汉字来说根本不够用。为了解决这个问题,ANSI编码出现了。ANSI规定使用两个字节来为一个字符编码,这样就包含了[0,0xffff]区间内的数字,一共可以为65536个字符编码。为了兼容之前的ASCII字符集,ANSI编码还规定,[0,0x7f]这个范围内的编码必须和ASCII字符集一样。
65536个字符多,但是仍然是不足以涵盖世界上所有字符的。因此,每类文字有各自不同的字符集标准,叫做代码页(Code Page)。每个代码页有不同的编码规则,因此同一个字码(数字)在不同代码页中对应不同的字符。这样的后果就是,在显示一段文字之前,必须先指定其代码页,而且同一次显示的文字只能使用同一个代码页。(如何切换代码页)

常见的代码页有:GB2312(简体中文),BIG5(繁体中文),Shift-JIS(日文)等。

C语言中的字符串与字符集详解

代码页例子

Unicode字符集:

Unicode字符集晚于ANSI字符集出现,而它的出现彻彻底底地解决了为世界上所有文字编码的问题。Unicode字符集规定使用4个字节来为一个字符编码,理论上编码范围为[0,0xffffffff],也就是4294967296个字符(42亿)。事实上Unicode字符集并不能够包含这么多字符,也没必要。Unicode字符集只使用了[0,0x10ffff]区间内的数字为字符编码,而且还包含一些保留区间,例如[0xd800,0xdfff]区间就是为了兼容UTF-16编码格式的保留区间。它将每65536个字符编为一个平面:其中[0,0xffff]被称为基本平面,包含所有语言常用字符;[0x010000,0x10ffff]被称为扩展平面,包含其他所有的不常用字符、其他符号以及生僻语言(例如表情、小图标、楔形文字等)。

3、Unicode字符集的常见编码格式

UTF-8:

一个字符的UTF-8编码长度为1-4字节,具体长度由该字符的Unicode码确定。(编码规则见下表)

Unicode码范围Unicode码(二进制)UTF-8编码UTF-8编码长度(字节)
[0,0x7f] 高位00000000 00000000 0aaaaaaa低位 首字节0aaaaaaa 1
[0x80,0x07ff] 高位00000000 00000bbb bbaaaaaa低位 首字节110bbbbb 10aaaaaa尾字节 2
[0x0800,0xffff] 高位00000000 ccccbbbb bbaaaaaa低位 首字节1110cccc 10bbbbbb 10aaaaaa尾字节 3
[0x010000,0x10ffff] 高位000dddcc ccccbbbb bbaaaaaa低位 首字节11110ddd 10cccccc 10bbbbbb 10aaaaaa尾字节 4

例:如何得出字符'

大佬总结

以上是大佬教程为你收集整理的C语言中的字符串与字符集详解全部内容,希望文章能够帮你解决C语言中的字符串与字符集详解所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: