WEB - ASCII,Unicode和常见编码方式



主要参考


ASCII 与 Unicode

  • ASCII 编码

    • 上世纪六十年代,美国制定的一套字符编码,将英文字符与计算机能够识别的二进制值做了统一转换规定;
    • ASCII 码中共规定了128个字符(包括32个控制符号)的编码,仅占用一个字节的后7位,首位统一为0
  • Unicode 字符集

    • ASCII 码中规定的128个字符无法满足世界上各种语言的输入需求,为尽可能容纳世界上所有的文本符号,避免编码冲突,制定了 Unicode;
    • Unicode 现有规模可容纳100多万个符号,可能需要1-3个字节来唯一表示(实际范围:U+0000 - U+10FFFF);
    • 基于 Unicode 字符集有多种编码实现,主要规定了二进制码的具体存储方式

基于 Unicode 的常见编码方式

  • UTF-8

    • 目前互联网上最常见的网页编码方式;

    • 变长编码方式,字符长度可能为1-4个字节

    • 编码规则(字母x表示可用的编码位)

      UTF-8编码规则

      • 对于单字节符号,首位为0,后7位为Unicode码(ASCII码中规定的128个字符与此处一致);
      • 对于n字节符号(n>1)首字节前n位为1,第n+1位为0,后面字节的前两位一律为10;剩余二进制位表示Unicode码
  • UTF-32

    • 最直观的编码方式,完全对应Unicode字符集,查找效率高(时间复杂度o(1));

    • 定长编码方式,字符长度位4个字节

    • 浪费空间,HTML5中明文规定,网页不得编码为UTF-32

  • UTF-16

    • 结合定长和变长两种编码方式;

    • 基本平面字符(U+0000 - U+FFFF)占用2个字节;

    • 辅助平面字符(U+010000 - U+10FFFF)占用4个字节;

    • 区分基本平面字符与辅助平面字符:

      • 基本平面内预留一个空段(U+D800 - U+DFFF),共2^11空间大小;

      • 将辅助字符(U+010000 - U+10FFFF)二进制编码的前10位高位H)映射至U+D800 - U+DBFF(空间大小2^10),后10位低位L)映射至U+DC00 - U+DFFF(空间大小2^10);

      • 按照2个字节读取字符码点,当值处于U+D800 - U+DBFF之间时,基本平面内无对应字符,表示需结合后2个字节作为一个辅助平面字符码点读取

  • UCS-2

    • ISO/IEC 10646 编码体系内的一种编码方式(区别于 Unicode 编码体系),后两种编码体系合并,UCS-2 整合进 UTF-16;

    • 实质就是 UTF-16 中的基本平面字符表示(2个字节),而 UTF-16 在 UCS-2 后发布,并明确宣布是 UCS-2 的超集(基本平面字符沿用 UCS-2 编码,扩展辅助平面字符并定义4字节表示法);

    • JavaScript 的编码方式,因此 JavaScript 仅支持基本平面字符(2个字节)


posted @ 2018-08-08 17:19  JustKidding  阅读(741)  评论(0编辑  收藏  举报