多种字符编码集的说明 [Java]

多种字符编码集的说明 [Java],第1张

多种字符编码集的说明 [Java] 多种字符编码集的说明
  1. ASCII : 美国标准信息交换码

    • 用一个字节的7位就可以表示(一种128个)
  2. ISO8859 - 1: 拉丁码表(也称之为: 欧洲码表)

    • 用一个字节的8位表示
  3. GB2312: 早期的中国的中文编码表

    • 最多采用两个字节编码

      • 注意: 这里是最多两个字节编码,那么有没有一个字节编码的情况呐?

        • 是有的,我们的ASCII码表中对应的字符在GB2312中是通过一个字节进行存储的

          • 我们可以使用一个字节进行存储就不会去使用两个字节去存储,如果我们使用一个字节可以进行存储,这个时候还要使用两个字节进行存储,这个时候就会有一个字节是浪费的,这个时候高位的一个字节中全部都是0,这个时候显然就很浪费空间

          • 但是我们使用1-2两个字节去存储不同的字符的时候又会出现一个问题: 如果这个时候根据我们的编码表中的编码之后有很多字节的编码后数据,那么这个时候两个字节在一起我们如何区分这两个字节是表示了两个占一个字节的字符,还是表示了一个占两个字节的数据?
            • 这个我们给出了解决方案:(分为两种情况)
              1. 如果首位是0,就是一个字节表示一个字符
              2. 如果首位是1,就是两个字节表示一个字符
我们说:其实所有的字符编码集的开头都是ASCII编码集,为什么要这样做?
  • 因为ASCII编码集提出的是最早的,并且英语是全球使用最多的语言

正因为所有的字符编码集的开头都是ASCII编码集,这个时候我们可以发现,不管什么时候,英文字符都是不会出现乱码的,因为所有的编码集中关于ASCII码表中的字符的存储都是一样的

  1. GBK: 中国的中文编码表GB2312的升级版
    • 融合了更多的中文字符符号(包括了简体和繁体),和GB2312一样都是最多两个字节存储
  • 关于GBK编码集中的每个字符占字节数的区分:
    • 首位为0: 表示一个字节表示一个字符
    • 首位为1: 表示两个字节表示一个字符
  1. Unicode: 国际标准码
    • 融合了目前人类使用的所有的字符,为每个字符分配了唯一的字符吗,所有文字都使用两个字节来表示
    • Unicode只是提供了世界上所有字符的对应编码数值,给每个字符都对应了一个给定的16进制编码,但是具体的每个字符对应的16进制编码到具体的字符集中是通过一段怎样的编码进行存储的,这个就要取决于字符编码方案
      • UTF-8和UTF-16还有UTF-32都是Unicode的具体字符编码方案

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

  • 我们就可以将Unicode看做是一个类,将UTF-8,UTF-16等当做这个类实例的对象,我们在使用的时候都是使用对象
  1. ANSI编码: 通常指的是平台的默认编码
    • 英文 *** 作系统中是ISO-8859-1
      • ISO-8859-1 就是拉丁码表(也就是欧洲码表)
    • 中文 *** 作系统中是GBK
      • 所以我们在中文 *** 作系统中的ANSI就是表示的GBK
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的问题

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5692906.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存