UTF-8和Unicode的关系 [Java]

Unicode: 国际标准码

  • 融合了目前人类使用的所有的字符,为每个字符分配了唯一的字符吗,所有文字都使用两个字节来表示
  • Unicode只是提供了世界上所有字符的对应编码数值,给每个字符都对应了一个给定的16进制编码,但是具体的每个字符对应的16进制编码到具体的字符集中是通过一段怎样的编码进行存储的,这个就要取决于字符编码方案
    • UTF-8和UTF-16还有UTF-32都是Unicode的具体字符编码方案

Unicode只是定义了一个庞大的全球通用的字符集,为每个字符规定唯一的编号,具体存储成什么样的字符流(字节数据),取决于字符编码方案 – 推荐使用UTF-8和UTF-16编码集来实现

  • 我们就可以将Unicode看做是一个类,将UTF-8,UTF-16等当做这个类实例的对象,我们在使用的时候都是使用对象

Unicode提出之后并没有实施,因为Unicode有缺陷,一共有三个问题:

  1. 我们知道英文字母只用一个字节表示就够了,这个时候如果我们使用两个字节来存储英文字母,就会很浪费空间
  2. 我们如何区别Unicode和ASCII?
    • 也就是Unicode和ASCII有冲突: 这个时候我们的ASCII是一个字节存储的,而Unicode中的字符都是使用两个字节进行存储的,这个时候我们如何判断这两个字节是通过ASCII编码的两个字符,还是通过Unicode编码的一个字符? — 这个时候判断不了(通过3中的方式可以解决区分Unicode和ASCII的问题,但是又会有新的问题出现)
  3. 如果这个时候Unicode编码集也要和GBK编码集一样通过首位为来区分的话,这个时候我们的Unicode使用两个字节又存储不下世界上所有的字符
由于这三个问题的困扰: 所以Unicode编码集在很长一段时间内都无法推广,知道后来互联网的出现,我们提出了UTF-8和UTF-16和UTF-32等编码集解决了Unicode的问题

总结:Unicode就相当于一个类,而UTF-8就好比是这个类创建出来的一个对象

  • 我们具体使用的时候是使用对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值