C#教学第19讲字符1(学习笔记)

来源:互联网 发布:淘宝红包口令 编辑:程序博客网 时间:2024/06/05 18:57
第19讲字符1
快乐乔巴的博客

  视频讲师:陈广老师

    大家好,今天我们来介绍一下C#中的字符Char,在.NET Framework中,字符总是表示成16位Unicode代码值,这简化了全球应用程序的开发。一个字符表示成System.Char结构(一个值类型)的实例。

    现在我们来讲讲电脑屏幕上的文字,屏幕上的字是由一个个像素点组成的。每一个字符用一个像素点拼接出来,这些像素点组成图像变成了我们的文字,我们可以用windows自带的放大镜来看(在左下角的开始--程序--附件--辅助工具中找到),然后放大倍数可以看到文字是由像素点组成的,如图:

图1

    可以看出这些文字都是由一个个像素点组成的,这说明文字其实是一个图像,计算机又是如何将我们的文字保存起来呢?是用一个个点将文字保存起来吗?当然不是,让我们先从英文开始,由于英文是拼写字符,英文字母a-z也就是26个字母再加上其他的符号一共也不会超过100个,这也就是说在我们的文字中存在着大量的重复符号。如果我们以图像的方式来保存字符,这样就会占用大量的磁盘空间,所以呢在计算机中实际上不会保存字符的图像。

    那如何解决字符的保存问题呢?这就不得不提到字符编码。由于我们的文字中存在着大量的重复字符,而计算机天生就是用来处理数字的,为了减少我们需要保存的信息量,我们可以使用一个数字编码来表示每一个字符,通过对每一个字符规定一个唯一的数字代号,然后,对应每一个代号,建立其相对应的图形,这样,在每一个文件中,我们只需要保存每一个字符的编码就相当于保存了文字,在需要显示出来的时候,先取得保存起来的编码,然后通过编码表,我们可以查到字符对应的图形,然后将这个图形显示出来,这样我们就可以看到文字了,这些用来规定每一个字符所使用的代码表格,就称为编码表。编码表就是对我们日常使用字符的一种数字编号。

    下面我们来说一下第一个编码表ASCII(美国标准信息交换码),在最初的时候,美国人自定了第一张编码表《美国标准信息交换码》,简称ASCII。它总共规定了128个符号所对应的数字代号,使用了7位二进制来表示这些数字,其中包含了英文的大小写字母,数字,标点符号等常用的字符,数字代号从0-127,ASCII的内容如下:

ASCII表

我们首先介绍一下字符在C#中的常用方法:

 字符和整数之间可以进行自由的转换,如下:

这时候可能有人要问了,能不能65转换成字母A呢?这个没问题,代码如下:

 当然,也可以用强制类型转换把41强制转换为A,代码如下:

好,学习了这些方法我们就可以尝试打印出ASCII字符表,代码如下:

我们执行程序,效果如图:

图3

好,这个ASCII表就打印出来了,但是这里有一些怪异的现象,比如说8后面的冒号没有了,这是因为8这个ASCII代表的是回退键,还有11到13都没有打印出来,10是一个换行符,所以就新起了一行,而13是回车符,11,12大家可以自己去翻一些资料。我们可以和之前的ASCII表对比一下,是完全对应的。

    由于ASCII出现的最早,因此各种编码实际上都受到了它的影响,并尽量与其兼容。比如我们刚才所写的打印ASCII码的这个程序,其实打印的是Unicode编码,但是Unicode编码完全与ASCII码兼容。所以打印出来的跟ASCII码其实是一样的。

    下面我们来讲一下扩展的ASCII编码-ISO8859,美国人通过ASCII码顺利解决了字符问题,可是欧洲各个国家还没有。比如法语中经常有许多英语中没有的字符因此呢ASCII码并不能帮助欧洲人解决编码问题。这个时候就出现了ISO-8859,由于ASCII码使用了7个位来保存一个编码,也就是说他有一个位其实是空着的,ISO-8859就使用了这个空的位,一共是8个位来保存一个编码,这样2的8次方等于256,也就是它所能保存的字符是ASCII的2倍。ISO-8859编码表如下:

ADCII-ISO8859

    由于这一张编码表中,只能增加95种字符的代码,这还满足不了整个欧洲的需要,所以呢ISO8859实际上不是一张编码表而是一系列的标准。它包括了14个字符码表,例如西欧的常用字符就包含在ISO8859-1字符表中,而在ISO8859-7中则包含了ASCII跟现代希腊语字符。这就是说ISO8859一共有14种表现形式。

    这时候ISO8859标准看上去像是解决了西欧人的字符问题,但是也带来了新的问题,比如说不能在同一篇文章中同时使用希腊文跟法文,因为他们的编码范围是重合的,他们分别使用的是ISO8859-1和ISO8859-7这2种字符表。当然这个问题还不是很严重,更为严重的问题是中国,朝鲜,日本,韩国的文字中包含了大量的符号,比如说我们中国的文字不是拼音文字,汉字有数万个之多,远远超过了256个字符。因此ISO8859实际上不能处理中文的字符,这个问题只能靠我们中国人自己来解决,下面我们就来讲一下中文编码。

    既然一个字节256种字符不能表示中文,那么我们就可以使用2个字节来表示一个中文。我们可以计算一下2个字节可以存放多少种字符,2个字节是16位,就是2的16次方65536。

 19

   第一个中文编码表GB2312-80,这个标准是1980年制定的,它共收入了6768个汉字,这些汉字对于我们日常使用来说已经足够了。但是,随着时间的推移和汉字文化的不断延伸及推广,有些原来很少用的字现在变成了常用字。比如说我们经常可以碰到一些名字非常怪异的人,他的名字在电脑中是打不出来的,所以到后来GB2312已经不能满足我们日常的使用,为了解决这些问题,我国于1999年12月1日发布了GBK编码规范。GBK与GB2312完全兼容,它收录了21003个汉字,基本上囊括了我国的所有汉字。GB18030是最新的汉字编码字符集国家标准,它向下兼容GBK和GB2312,GB18030编码是一种可变字长的编吗,它可以以一个字节或者2个字节或者4个字节的方式来进行存储,也就是说它的长度是可变的。

    好,现在的中文问题是可以解决了。但是新的问题就来了,随着互联网的发展,我们可以直接访问远在天边的服务器,电子文件在全世界传播,而每个国家都使用自己的编码表,这时候就出现了乱码的问题。如果整个地球都使用一张统一的编码表,这样就不会出现乱码了。就好像我们全世界的人都说一种语言,那该多方便。

UNICODE

    UNICODE是一个组织自律于制定一个能够覆盖几乎任何语言的编码表,它的全称是Universal Multiple-Octet Coded Character Set(全球双字节编码字符集),简称为UCS。我们现在使用的.NET Framework2.0它使用的就是Unicode字符集,这样就简化了全球运用程序的开发。UNICODE字符集它统一使用2个字节来保存一个编码,当然它也有很多种形式,大家可以查阅相关的资料。

    UNICODE的出现看上去是彻底解决了字符问题,但是现在还在使用中的大量的软件和硬件有很多基于单字节的编码实现的,这时候UCS也就是UNICODE的双字节表示的字符是不可能在其上面工作的。这样就出现了UTF编码。为了尽可能与现有的软件和硬件相适应,美国人又制定了一系列用于传输和保存UNICODE编码的标准UTF,这些编码称为UCS传输格式码,也就是将UCS的编码通过一定的转换,来达到使用它的目的。常见的有UTF-7 UTF-8 UTF-16等,其中UTF-8得到了广泛的使用。

    UTF-8编码是可变长的编码,对于不同的UNICODE它可以变成不同的长度,UTF-8的出现解决了字符编码问题,又可以在现有的设备上通行,因此得到了广泛的应用。比如现在网络上非常流行的XML技术,它使用的就是UTF-8标准编码。说了这么多其实我只是讲了计算机编码技术的一小点,也就是大概做个介绍。如果大家感兴趣可以查阅相关的资料。

   好,这节课就讲到这里。

由快乐乔巴听课摘写笔记 

原创粉丝点击