ASCII编码(美国信息交换标准代码)
相信大部分同学学习c语言第一个接触的就是ASCII编码,ASCII码一个字符用一个字节表示,即8位。
但即便是有8位,系统对ASCII码的实际处理是低7位,代表127个字符(0x00~0x7F),忽略高位(在ASCII码中作奇偶校验位(防止数据传输中出错)),这是因为最初的计算机诞生和发展是在美国,而英文字母只有26个,加上阿拉伯数字和标点符号等字符全部编码也仅有127个,这对处理英文文档来说确实是个不错的方法,可是随着计算机的普及,世界各地的语言又不尽相同,于是便出现了后来的Unicode字符集及其各种编码方式。
Unicode字符集
Unicode是一种全宇宙通用字符集,是世界各国合作开发的一种语言,包含了世界上绝大部分语言的字符编码,显然中文的编码也包括在内。
Unicode计划使用了17个平面,一共有17*65536=1114112个码位。在Unicode 5.0.0版本中,已定义的码位只有238605个,分布在平面0、平面1、平面2、平面14、平面15、平面16。其中平面15和平面16上只是定义了两个各占65534个码位的专用区(Private Use Area)。所谓专用区,就是保留给大家放自定义字符的区域,可以简写为PUA。
程序员对 Unicode 这个名字发自内心的恐惧和敬畏。我们都知道在我们的软件中应该 “支持 Unicode”。 但 Unicode 很深奥,它有上千页的 Unicode 标准 ,还有几十页的补充附录、报告和,简直太吓人了。即使 Unicode 诞生 30 多年后,程序员们还觉得它很神秘。 – Nathan Reed
Unicode为每一个字符映射了一个特定的数值(二进制数),无论在任何平台或任何软件上,也无论哪一种语言,都有与之对应的编码。
Unicode迄今为止,仍然在不断的更新版本,加入更多的字符。尽管人们对世界上几乎所有语言的所有字符都进行了编码,但是Unicode仍然拥有巨大的空间等待新的字符加入。
Unicode只是一组字符设定或者说是从数字和字符之间的逻辑映射的概念编码,但是它并没有指定代码点如何在计算机上存储。正因如此,于是诞生了不同的编码方式。
编码方式种类
谈到编码方式,相信大家都不陌生,最常见的UTF编码,GBK(中国地区)编码等。
UTF编码
# Unicode的实现方式
UTF-8 使用一至四个字节为每个字符编码
UTF-16 使用二或四个字节为每个字符编码
UTF-32 使用四个字节为每个字符编码
它可以用来表示Unicode标准中的任何字符,而且其编码中的第一个字节仍与ASCII相容,使得原来处理ASCII字符的软件无须或只进行少部分修改后,便可继续使用。
UTF-8兼容ASCII,意味着在对英文编码是仅仅使用1个字节,重音文字、希腊字母或西里尔字母等使用2字节,中文编码使用3个字节,辅助平面字符则使用4字节,即采用可变字节长度存储方式。
GBK编码(国标)
GBK全称《汉字内码扩展规范》,GBK编码是GB2312编码的超集,向下兼容GB2312,同时向上支持ISO 10646.1国际标准。GBK使用了双字节编码方案,共收录了21003个汉字,包含国家标准GB13000-1中的全部中日韩汉字。(笔者认为GBK与GB2312可不做区分,GB2312在软件中更为常见,中国大陆windows系统采用GBK编码)同样GBK编码也兼容了ASCII编码方案。
小tips:文本文档编码的存储所指均为字符,区分编程语言中其他数据类型占用字节大小
细心的小伙伴可能已经发现了,如今我们经常遇到的后缀名为.csv的文件也是文本文件的一种,当我们用正确的编码方式通过记事本或其他笔记软件打开时,每列数据之间是靠英文“,”隔开的。下面也附上几款好用的笔记软件,喜欢的小伙伴可以下载使用哦!
结语:计算机编程是一门实践性比较强的专业,只要动手,就会有不断发现,经验也越来越丰富。
Typora和Notepad++:链接:https://pan.baidu.com/s/1ADZqv_l8GoDsmYvoh057jQ
提取码:wig7