Unicode: 国际标准码
- 融合了目前人类使用的所有的字符,为每个字符分配了唯一的字符吗,所有文字都使用两个字节来表示
- Unicode只是提供了世界上所有字符的对应编码数值,给每个字符都对应了一个给定的16进制编码,但是具体的每个字符对应的16进制编码到具体的字符集中是通过一段怎样的编码进行存储的,这个就要取决于字符编码方案
- UTF-8和UTF-16还有UTF-32都是Unicode的具体字符编码方案
Unicode只是定义了一个庞大的全球通用的字符集,为每个字符规定唯一的编号,具体存储成什么样的字符流(字节数据),取决于字符编码方案 – 推荐使用UTF-8和UTF-16编码集来实现
- 我们就可以将Unicode看做是一个类,将UTF-8,UTF-16等当做这个类实例的对象,我们在使用的时候都是使用对象
Unicode提出之后并没有实施,因为Unicode有缺陷,一共有三个问题:
- 我们知道英文字母只用一个字节表示就够了,这个时候如果我们使用两个字节来存储英文字母,就会很浪费空间
- 我们如何区别Unicode和ASCII?
- 也就是Unicode和ASCII有冲突: 这个时候我们的ASCII是一个字节存储的,而Unicode中的字符都是使用两个字节进行存储的,这个时候我们如何判断这两个字节是通过ASCII编码的两个字符,还是通过Unicode编码的一个字符? — 这个时候判断不了(通过3中的方式可以解决区分Unicode和ASCII的问题,但是又会有新的问题出现)
- 如果这个时候Unicode编码集也要和GBK编码集一样通过首位为来区分的话,这个时候我们的Unicode使用两个字节又存储不下世界上所有的字符
由于这三个问题的困扰: 所以Unicode编码集在很长一段时间内都无法推广,知道后来互联网的出现,我们提出了UTF-8和UTF-16和UTF-32等编码集解决了Unicode的问题
总结:Unicode就相当于一个类,而UTF-8就好比是这个类创建出来的一个对象
- 我们具体使用的时候是使用对象