以前端的角度看字符编码
做了2年前端,一直对字符编码不够理解,最近要做图片上传,所以花了点时间把这个给了解清楚。
首先,计算机中数据存储的最小单位是位,英文是bit,简记为b,每个0或1就是一个位。一个字节由8个位组成,比如11011100,所以一个字节可以表示的范围是00000000~11111111,转换成十进制就是0~255。
什么是ASCII码?
把所有的空格、标点符号、数字、英文大小写字母用连续的字节来表示,从0一直编到了第127号,这个编码方案就是”ASCII”编码,比如字母a的ascii编码就是97.但有些国家的语言不都是英文字母,所以把127号之后的空位也用来表示字符,一直编码到255,所以从128到255的这些字符集被称为‘扩展字符集’。
什么是GB2312?
中国人因为没有可以利用的字节来表示汉字,所以定义了一个规则,一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字。但这个规则是中国自己定义的,并不适合其他国家使用。
什么是unicode?
为了统一全世界的编码, ISO (国际标谁化组织)的国际组织废了所有的地区性编码方案,推出了“Universal Multiple-Octet Coded Character Set,即unicode,规定了必须用两个字节,也就是16位来统一表示所有的字符。简单来说,就是用0-65535这些数字来对应世界上所有的字符。对于ASCII里的127位之前的字符,unicode包持其原编码不变,只是将其长度由原 来的8位扩展为16位,而其他文化和语言的字符则全部重新统一编码。由于”半角”英文符号只需要用到低8位,所以其高8位永远是0,因此这种大气的方案在 保存英文文本时会多浪费一倍的空间。