字符编码问题

常使用的几种字符编码和相互之间关系

我们做编程开发时,经常看到并使用的一些字符集,如GBK、Uniode、UTF-8等等。但是我们在使用他们时,如果对底层原理浅尝辄止往往在项目开发时,遇到相关问题摸不着头绪,本文先来浅析一下它们彼此的关系。

计算机在存储信息时,不管是英文字符还是中文字符最终都是保存为保存为0、1的二进制数据。例如字符'A'对应的ASSIC值是65,那么转换成二进制数据就是01000001.举一个简单的例子,这就是我们输入在电脑中的字符和最终存储的数据形式。此时会有说,既然每个字符都有其一一对应的ASSIC值,那么我们直接用ASSIC编码集统一不就行了,为什么还搞出这么多的编码集,在数据交互和保存时还得注意编码集的使用。

Unicode字符集:

当然,如果用的是英文,这当然是满足需求了,但是考虑到这个世界有很多的国家和地区、他们彼此之间使用不同的语言,如果单单使用ASSIC这一套字符集,显然是不满足需求的,例如单单一个中文就搞出来好几套字符编码,简体字一般使用GB23112和后来的GBK等编码格式,繁体字使用Big5。日文使用的是Shift JIS、ECU-JP等等、其他家就更多了,罗列下来字符集就非常多了,这使得不同文字之间的交互变的困难,此时为了解决该问题,Unicode字符集便应运而生,Unicode字符集为了兼容世界各国语言之间难以兼容交互的问题,将原来ASSIC一个字节表示一个字符的基础上,扩展到了后来的四个字节,这基本上可以将世界各国所有的语言文字都囊括进来,可以做到任意一个字符都有其对应的数字标志位,不管是英文、中文、拉丁文等等。但是每个事物的出现除了有优点之外还有它的不足之处。诚然Unicode字符集固然一劳永逸的解决了字符编码繁多交互不方便的问题,但它那一个字符就需要四个字节来存储的要求对于电脑存储和传输效率带来了一定的压力,尤其是在当时早起电脑硬件还不发达的时候,硬盘存储和字节传输带宽都是非常紧缺的资源,无法消耗起一个字符就得用四个字节表示的代价。

UTF字符编码:

UTF的的全程是“Unicode Transformation Format”.主要有UTF-8、UTFF-16、UFT-32。其中UTF-8并不是单子固定的字节长度表示字符的,而是一种可变长的编码方式。它可以表示Unicode字符集中的任意字符。UTF-8编码采用1至4个字节来表示一个字符,根据字符的不同范围来确定编码长度。 UTF-8的出现将大大解决我们上述提到的问题。

 1. 融合性:UTF-8能够适应各种语言的字符编码需求,它可以表示世界上几乎所有的字符,包括亚洲文字、西方文字和特殊字符等。 

 2. 兼容性:UTF-8是ASCII编码的超集,即ASCII编码中的字符在UTF-8中可以用相同的编码表示,这样就实现了与ASCII编码的兼容性。 

 3. 节省空间:相比其他的Unicode编码方式,UTF-8能够使用更少的字节来表示相同的字符,特别是对于ASCII字符,只需要1个字节就可以表示,这样可以节省存储空间。 

 4. 兼容旧系统:由于UTF-8的兼容性和节省空间的特点,很多旧系统和软件也可以直接支持UTF-8编码,而不需要进行大规模的改造。

 5. 国际化支持:UTF-8的出现使得国际化软件和网站得以普及,用户可以使用自己的母语来进行输入和交流,有效地促进了不同语言和文化之间的交流与合作。

文章到了这里,似乎已经讲清楚了不同的字符集合编码格式之间的关系(对于字符集合字符编码文章不做深入探究,只做简单介绍引出问题),但是并没有提及项目中遇到的问题,那么下面我将结合项目中遇到的问题来进一步探讨。

posted @ 2024-06-15 15:15  花瓣飘落的地方  阅读(1)  评论(0编辑  收藏  举报