zoukankan      html  css  js  c++  java
  • unicode、utf-32、utf-8、utf-16

    unicode

    unicode(统一字符)规定了所有字符的字符范围。

    unicode 规定了范围。

    根据unicode规定的范围,可以制定不同的实现方案来达到字符统一目的。

    utf-32

    utf-32 是最好理解的方案。所有的字符都不超过232种, 所以用 utf-32 可以涵盖所有的字符。缺点是每个字符都会占4个字节。

    utf-8

    utf-8 是一种较节约空间的方案。utf-8 分了4种情况。

    当字符为“美国标准码”时长度为一个字节。如'0111 1111'。这个高位的(第一个)0 就表示该字符是一字节字符。
    所以需要有一个规则,来确定该字符占据几个字节。

    两个字节的情况。'110x xxxx xxxx xxxx'。 前面的两个1代表 这是两个字节的字符。0作为字符字节长度识别的结束标识符。这个情况下一共有 25+8 种。

    三个字节的情况。'1110 xxxx xxxx xxxx xxxx xxxx'。 这个情况下一共有 24+8+8 种。

    四个字节的情况。'1111 0xxx xxxx xxxx xxxx xxxx xxxx xxxx'。 这个情况下一共有 23+8+8+8 种。

    utf-16

    在unicode中D800到DFFF为空段,这个区间范围不表示任何字符。

    D800到DFFF即 '1101 1000 0000 0000' 到 '1101 1111 1111 1111'
    两者相减 得到 '0000 0111 1111 1111' 。
    这表示 有 211 种状态未被使用。

    unicode目前一共有17216种状态。
    17是17个面。
    其中一个面是 基本面。范围是 0000-FFFF 即可用两字节表示。
    其他16个面是 辅助面。范围是 010000-10FFFF。这些状态有 16
    216 种,即220
    我们将D800到DFFF为空段范围平分,得到两个 210种状态的 区间。两个区间组合在一起就能够表示 220 种状态。每个区间占据2字节。一共占据4字节。
    这就是 utf-16 中表示非基本面的字符的方式。

  • 相关阅读:
    Java Web学习笔记之---EL和JSTL
    Java Web学习笔记之---Servlet
    Java Web项目案例之---登录注册和增删改查(jsp+servlet)
    Java项目案例之---加法计算器(转发和重定向)
    Java Web项目案例之---登录和修改(JSP)
    Java Web学习笔记之---JSP
    Java项目案例之---定时器的使用
    Java项目案例之---常用工具类练习
    Java学习笔记之---API的应用
    这些年我对安全成熟度模型的一点点思考
  • 原文地址:https://www.cnblogs.com/AFu-1993/p/12739144.html
Copyright © 2011-2022 走看看