字节.字符.字符集

一、二进制
  计算机要处理的数据是多种多样的,如数字、文字、符号、图形、音频、视频等,它们在内存中都是以二进制的形式来表示。
  内存条是一个非常精密的部件,包含了上亿个电子元器件,它们很小,达到了纳米级别。这些元器件,实际上就是电路;电路的电压会变化,要么是 0V,要么是 5V,只有这两种电压。5V 是通电,用1来表示;0V 是断电,用0来表示。所以,一个元器件有2种状态,0 或者 1。
我们通过电路来控制这些元器件的通断电,会得到很多0、1的组合。例如,8个元器件有 2^8=256 种不同的组合,16个元器件有 2^16=65536 种不同的组合。虽然一个元器件只能表示2个数值,但是多个结合起来就可以表示很多数值了。
  一般情况下我们不单独的使用这些元器件,而是将8个元器件看做一个单位,即使表示很小的数,例如 1,也需要8个,也就是 00000001。
二、字节
  1个元器件称为1比特(Bit)或1位,它是数据存储的最小单位。8个元器件称为1字节(Byte)(简写为B),那么16个元器件就是2Byte,32个就是4Byte,以此类推。
  1 B(byte 字节)= 8 bit(位);
  1 KB = 1024 B;(2^10 )
  1 MB = 1024 KB; (2^20 )
  1 GB = 1024 MB; (2^30 )
  1 TB = 1024 GB;
  (扩展:计算机中的32位/64位指的就是CPU一次能处理的最大数据)
三、字符
  各个国家的文字(比如中文的简体、繁体、少数民族文字等)、字母(比如英文、法文、日文、拉丁文等等)、标点符号、图形符号、数字等等都是一个字符。
四、字符集
  前文中说过,计算机是以二进制的形式来存储数据的,它只认识 0 和 1 两个数字,我们在屏幕上看到的字符,在存储之前都被转换成了二进制,所以在显示时也要根据二进制找到对应的字符。也就是说:特定的字符必然对应着固定的二进制数字,否则在转换时将发生混乱。
  那么,怎样将每一个字符与它的二进制对应起来呢?这就需要有一套规范,计算机公司和软件开发者都必须遵守的规范,这套规范就称为字符集(Character Set)或者字符编码(Character Encoding)。
  字符集的意义就是为每个字符分配一个唯一的编号,通过编号就能够找到对应的字符。可以将字符集理解成一个很大的表格,它列出了所有的字符和二进制的对应关系。
 
  字符集的种类较多,每种字符集包含的字符个数也不同,常见的字符集有:
  1、ASCII字符集:美国(国家)信息交换标准码,由美国在上世纪60年代发布,当然后来也更新扩展过多次。主要用于显示现代英语、阿拉伯数字和其他西欧语言的字符。
  
  在ASCII中,一个英文字母或数字占一字节(1B)。
 
  2、GB2312字符集:GB2312 是对 ASCII 的中文扩展。
  由于计算机是老美发明的,没考虑其它国家的字符,等中国人得到计算机时,发现ASCII字符集无法表示汉字,况且我们有6000多个常用汉字需要保存。但是这难不倒智慧的中国人民,所以我国《国家标准总局》在1981年发布了GB2312字符集,它所收录的汉字已经覆盖99.7%的使用频率(点赞!)。
  在GB2312中,一个英文字母或数字占一字节(1B),一个汉字字符占两个字节(2B)。
  注意:计算机在简体中文系统下,ANSI 编码实际就代表 GB2312 编码。
 
  3、BIG5字符集:又称大五码,1984年由台湾财团法人信息工业策进会和五家软件公司联合创立,故称大五码。 Big5码的产生,主要是因为台湾政府当时尚未推出官方的汉字编码,而中国大陆的GB2312编码也没有收录繁体字(台湾、香港、澳门等地区至今仍使用繁体字)。
 
  4、GB18030字符集:是对GB2312字符集的扩充和更新。
  由于GB2312能够表示的汉字不够完全,所以对于人名、古汉语等方面出现的罕见字,GB2312不能处理的,并且这种编码方式也仅仅在中国行得通。所以,GB18030字符集和GBK应运而生。它由我国国内外的知名信息技术行业的公司,信息产业部和原国家质量技术监督局联合实施,并于2000年发布。
  这个标准的字符总编码空间超过150万个,收录了27484个汉字,覆盖了中文、日文、鲜朝语和中国少数民族文字。满足中国大陆、香港、台湾、日本和韩国等东亚地区信息交换多文种、大字量、多用途、统一编码格式的要求。
  一般在GBK编码下,不论中英文都是双字节的。即:一个汉字字符占用两个字节(2B)。
 
  5、Unicode字符集:容纳世界上所有语言字符和符号的集合。
  如上所述,世界上存在着多种编码方式,这就会导致不同国家之间的信息、邮件、网页在通信时出现乱码。比如:信息的提供者可能是日文的ANSI编码体系,但信息的读取者可能是中文的编码体系,他们对同一个二进制编码值进行显示,采用了不同的编码,就会导致乱码。所以随着国际互联网的发展,需要满足跨语言、跨平台进行文本转换的要求---Unicode码诞生了。
  Unicode字符集由一个叫作为 Unicode 学术学会的机构制订的字符编码系统,支持现今世界上各种不同语言的书面文本的交换、处理及显示。该编码于1990年开始研发,1994年正式公布,最新版本是2019年5月7日发布的Unicode 12.1.0。
  说明:Unicode只是一个编码规范,目前主要有三种实现方式(Unicode Translation Format ,UTF):UTF-8,UTF-16和UTF-32。
 
  6、UTF-8编码:Unicode虽然统一了编码方式,但是它的效率却不高。为了提高它的编码效率,于是就出现了UTF-8编码。它是一种针对Unicode的可变长度字符编码,可以用来表示Unicode标准中的任何字符。是在互联网上使用最广泛的一种方式(又称万国码)。
  一般UTF-8编码下,一个英文字符占一个字节,一个汉字字符占用 3 个字节(3B,少数汉字占用4字节)。
   另外,UTF-16,UTF-32分别是Unicode的16位和32位编码方式。Java虚拟机(JVM)使用的就是UTF-16。
 
  总结:
字符集
所占字节
1个字母或数字字符
1个汉字字符
ASCII
1
--
GB2312
1
2
GBK
2
2
UTF-8
1
3或4
 
posted @   皮蛋&&瘦肉  阅读(349)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示