zoukankan      html  css  js  c++  java
  • 字符编码笔记:ASCII,Unicode 和 UTF-8(理解)

    • 1、ASCII 码
      • 美国制定的字符编码规则,对英语字符与二进制位之间的关系做了统一规定。
      • 占一个字节,8 位,最多可表示 2^8 = 256 种状态(字符)
      • 实际共有 128 个字符,只占用一个字节的后面 7 位。首位统一规定为 0。
    • 2、非 ASCII 编码
      • 其他国家各自制定的编码规则。映射本国字符和二进制之间的关系。
        • 适合本国字符数在256以内的国家。
      • 其他国家(字符数 > 256),则有自己的编码规则。比如中文的:GB2312
    • 3、Unicode
      • 容纳世界上所有符号的符号集。每个符号都有自己的二进制代码。
      • 只是一个符号集,只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。
        • 比如:英文字符全部可用 1 个字节表示,但是汉字可能需要 2 或 3 个字节。一种编码格式全部都用2个或者3个字节表示会有浪费。所以该如何存储呢?
    • 4、UTF-8
      • 1、概念:
        • 互联网上使用最广的一种 Unicode 的实现方式。(Unicode 也有其他实现方式)
      • 2、特点:
        • 变长的编码方式。它可以使用 1~4 个字节表示一个符号,根据不同的符号而变化字节长度。
      • 3、编码规则:
        • 1)对于单字节的符号,字节的第一位设为 0,后面 7 位为这个符号的 Unicode 码。
          • 因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。
        • 2)对于 n 字节的符号(n > 1),第一个字节的前 n 位都设为 1,第 n + 1 位设为 0,后面字节的前两位一律设为 10。
          • 剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。
      • 4、Unicode 和 UTF-8的对应关系()
        • 4.1 关系图:
          • 图:
          • 说明:
            • 总感觉这个图不理解,不过还是做一些解读和说明吧。
            • 第一行:
              • 字符最多占7位(0-7位)
              • 所以:Unicode 符号范围:0(十六进制:0)-111 1111(十六进制:7F)
            • 第二行:
              • 字符最多占11位(8-11位)
              • Unicode 符号范围:1000 0000(十六进制:80)-111 1111 1111(十六进制:7FF)
            • 第三行:
              • 字符最多占16位(12-16位)
              • Unicode 符号范围:1000 0000 0000(十六进制:800)-111 1111 1111(十六进制:7FF)
            • 第四行:
              • 字符最多占21位
              • Unicode 符号范围:同上
        • 4.2 转换:
          • Unicode 和 UTF-8都用16位表示,需要从中提取出来具体的值,然后转换。
          • Unicode 到 UTF-8 的转换
            • 根据Unicode 的值,确定其符号范围对应的 UTF-8 是多少位。然后,高位补0填充。
          • UTF-8 提取 Unicode
            • 看其是多少位,提取相关的 Unicode 值。
    • 5、编码存储方式:Little endian 和 Big endian
      • 5.1 概念理解
        • 以汉字严为例,Unicode 码是 4E25,需要用两个字节存储,一个字节是 4E,另一个字节是 25。
          • 存储时,4E 在前,25 在后,这就是 Big endian 方式;
          • 25 在前,4E 在后,这是 Little endian 方式。
        • 即:一般文本都是从左往右的格式。
          • 如果编码从左往右存:是 Big endian 方式(高位在前,FE FF 表示)
          • 如果编码从右往左存:是 Little endian 方式(高位在后,FF FE 表示)
      • 5.2 区分:
        • Unicode 规范定义,每个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做 "零宽度非换行空格"(zero width no-break space),用 FEFF 表示。这正好是两个字节,而且 FF 比 FE 大 1。
        • 如果一个文本文件的头两个字节是 FE FF,就表示该文件采用大头方式(左小右大);
        • 如果头两个字节是 FF FE,就表示该文件采用小头方式(左大右小)。
    • 6、参考:
  • 相关阅读:
    Android实战开发租赁管理软件(适配UI,数据的存储,多线程下载)课程分享
    随 机 数 算 法
    java 状态模式 解说演示样例代码
    数据挖掘 决策树算法 ID3 通俗演绎
    经常使用表单数据的验证方法
    编程基本功训练:流程图画法及练�
    log4net使用具体解释
    妄想性仮想人格障害 新手教程 +改动器
    使用VS插件在VS2012/2013上编辑和调试Quick-Cocos2d-x的Lua代码
    经典回忆Effective C++ 1
  • 原文地址:https://www.cnblogs.com/buwuliao/p/10911239.html
Copyright © 2011-2022 走看看