编码,字符集
首先计算机只能识别0
和1
所有任何字符都需要表示成不同的bit位来表示。通常我们都是使用byte(8个bit)来作为最小单位。
ASCII
对于英文来讲,最开始有一套对应关系,但是因为英文中字符较少,所有只需要128个字符集,那么也就是最多7个bit就可以表示。所有ASCII中只用了0到127,byte的最高位置一直为0。(表示的内容不仅包含有字符集,还包含有一些无法显示的控制符号)
问题:
- 有的国家字符比较多剩余的128不够表示,需要更多的byte
- 中文甚至更多
Unicode
当不同国家或者组织使用各自的编码方式,也就是有可能同一个二进制表示不同的字符的时候,大家的沟通就会出现问题(比如使用英文的国家使用0xFF表示一个字母a
,但是中国使用0xFFEE表示汉字我
,这样在交流的时候如果两个人使用的是不同的字符集,在把同样一段编码内容进行翻译的时候就会出现不同的结果)。所以需要一个集合,这个集合可以包含所有的字符,每一个字符都用独一无二的二进制表示,也就是这个字符集中每一个字符都对应着唯一一个二进制表示方式,那么这种方式就是Unicode。
问题:
- Unicode给出了一个集合,集合表示字符对应的二进制。但是不同字符对应的二进制长度不一样,在存储的时候如何存储和解析是一个问题。比如有的字符需要至少3个byte,那么这3个byte直接存储的话有可能会和只需要1个byte的字符对应的二进制产生冲突。
- 如果为了解决冲突问题最简单的方式就是统一使用一个最大的长度的bytes,但是这样会带来浪费问题。所有就需要找一种合适的Unicode的存储方式。
UTF-8 UTF-16 UTF
网友评论