ASCII、Unicode和UTF-8等常见字符编码格式介绍
信息存储在计算机中是转换成⼆进制来存储的,⼆进制的发明据说是来源于中国阴阳⼋卦。后德国数理哲学⼤师莱布尼茨是最早接触中华⽂化的欧洲⼈之⼀,从他的传教⼠朋友鲍威特寄给他的拉丁⽂译本中,读到了⼋卦的组成结构,惊奇地发现其基本素数0和1。在莱布尼茨眼中,“阴”与“阳”基本上就是他的⼆进制的中国版。他曾断⾔⾔:“⼆进制乃是具有世界普遍性的、最完美的逻辑、最先进语⾔”
计算机存储单位⼀般⽤bit、B、KB、MB、GB、TB……来表⽰,它们之间的关系是:
位 bit (⽐特)(Binary Digits):存放⼀位数,即 0 或 1,最⼩的存储单位。[英⽂缩写:b(固定⼩写)]
byte:8个⼆进制位为⼀个字节(B),最常⽤的单位。换算关系如下:
1 Byte(B) = 8 bit
1 Kilo Byte(KB) = 1024B
1 Mega Byte(MB) = 1024 KB
1 Giga Byte (GB)= 1024 MB
1 Tera Byte(TB)= 1024 GB
什么是字符编码?
计算机只能处理数字,如果要处理⽂本,就必须先把⽂本转换为数字才能处理。最早的计算机在设计时采⽤8个⽐特(bit)作为⼀个字节(byte),所以,⼀个字节能表⽰的最⼤的整数就是255(⼆进制11111111=⼗进制255),如果要表⽰更⼤的整数,就必须⽤更多的字节。⽐如两个字节可以表⽰的最⼤整数是65535,4个字节可以表⽰的最⼤整数是4294967295。
ASCII编码:
由于计算机是美国⼈发明的,因此,最早只有127个字母被编码到计算机⾥,也就是⼤⼩写英⽂字母、数字和⼀些符号,这个编码表被称为ASCII编码,⽐如⼤写字母A 的编码是65,⼩写字母z 的编码是122。
但是要处理中⽂显然⼀个字节是不够的,⾄少需要两个字节,⽽且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,⽤来把中⽂编进去。
全世界有上百种语⾔,⽇本把⽇⽂编到Shift_JIS⾥,韩国把韩⽂编到Euc-kr⾥,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语⾔混合的⽂本中,显⽰出来会有乱码。
Unicode编码:
因此,Unicode应运⽽⽣。Unicode把所有语⾔都统⼀到⼀套编码⾥,这样就不会再有乱码问题了。Unicode标准也在不断发展,但最常⽤的是⽤两个字节表⽰⼀个字符(如果要⽤到⾮常偏僻的字符,就需要4个字节)。现代操作系统和⼤多数编程语⾔都直接⽀持Unicode。
unicode汉字UTF-8编码:
新问题的出现:如果统⼀成Unicode编码,乱码问题从此消失了。但是,如果你写的⽂本基本上全部是英⽂的话,⽤Unicode编码⽐ASCII编码需要多⼀倍的存储空间,在存储和传输上就⼗分不划算。
因此,⼜出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把⼀个Unicode字符根据不同的数字⼤⼩编码成1-6个字节,常⽤的英⽂字母被编码成1个字节,汉字通常是3个字节,只有很⽣僻的字符才会被编码成4-6个字节。如果你要传输的⽂本包含⼤量英⽂字符,⽤UTF-8编码就能节省空间。
unicode和ascii是⼀种编码⽅式,⽽UTF-8,UTF-16等是⼀种存储⽅式,在存储和传输上节约空间、提⾼性能的⼀种编码形式。
计算机系统通⽤的字符编码⼯作⽅式:
在计算机内存中,统⼀使⽤Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
⽤记事本编辑的时候,从⽂件读取的UTF-8字符被转换为Unicode字符到内存⾥,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到⽂件:
浏览⽹页的时候,服务器会把动态⽣成的Unicode内容转换为UTF-8再传输到浏览器:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论