字符编码
计算机只能处理二进制数字,而且计算机是美国人发明的,所以最早期只有英文26个字母的大小写、数字、和一些符号共计127个字符被编码到计算机中,这个编码表被称为ASCII编码表,比如大写字母A的编码是65,小写z的编码是122。
因为计算机只能处理数字,所以计算机要处理文本的话,就必须先把文本转换成数字才能处理。计算机在最早设计时,采用8比特作为一个字节,所以一个字节表示的最大整数是255,(11111111 (二)= 255(十)),如果要表示更大的数,就需要更多的字节。
看得出来,要处理中文,显然一个字节是不够的,至少需要2个字节,而且还不能和ACSII表冲突,所以中国制定了GB2312编码,把中文编了进去。但是世界上的语言是很多的,日本,韩文等等,各国都有各国的标准,所以在多语言的文本中,就不可避免的出现了乱码。
因此,Unicode诞生。它把所有的语言都统一到一套编码中,这样就不会出现乱码问题了。Unicode也在不断的发展中,现在操作系统和大多数编程语言都支持。
ASCII编码是一个字节,Unicode通常两个字节。虽然此时乱码问题解决了,但是当我们使用大量英文字符时,用Unicode编码比ASCII编码需要一倍的存储空间,就不太划算了。
所以为了节约空间,出现了把Unicode转成UTF-8编码,UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间:
总结一下现在计算机系统通用的字符编码工作方式:在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者传输时,转成UTF-8编码。编辑文件时,从文件中读取的UTF-8转成Unicode字符到内存中,编辑好之后再转成UTF-8保存。浏览网页时候,服务器会把动态生成的Unicode内容转成UTF-8再传输到浏览器。