• 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、参考:

字符编码笔记:ASCII,Unicode 和 UTF-8(理解)的更多相关文章

  1. 理解记忆三种常见字符编码:ASCII, Unicode,UTF-8

    理解什么是字符编码? 计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是25 ...

  2. 字符编码:ASCII,Unicode,UTF-8

    1.ASCII码美国制定的一套字符编码,对英语字符和二进制位之间的关系,做了统一规定.ASCII码一共规定了128个字符(包括32个不能打印出来的控制符号)的编码,占用一个字节,字节的最前面1位统一为 ...

  3. (转)字符编码笔记:ASCII,Unicode和UTF-8

    字符编码笔记:ASCII,Unicode和UTF-8 访问地址:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

  4. 字符编码笔记:ASCII,Unicode和UT…

    字符编码笔记:ASCII,Unicode和UTF-8 今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料. 结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才 ...

  5. 字符编码笔记:ASCII,Unicode和UTF-8(转)

    字符编码笔记:ASCII,Unicode和UTF-8 作者: 阮一峰 日期: 2007年10月28日 今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料. 结果,这个 ...

  6. [转帖]字符编码笔记:ASCII,Unicode 和 UTF-8

    字符编码笔记:ASCII,Unicode 和 UTF-8 http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html 转帖 ...

  7. 【转载】字符编码笔记:ASCII,Unicode和UTF-8

    字符编码笔记:ASCII,Unicode和UTF-8 作者: 阮一峰 今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料. 结果,这个问题比我想象的复杂,从午饭后一直 ...

  8. 关于字符编码:ascii、unicode与utf-8

    转自:https://foofish.net/unicode_utf-8.html 阮一峰老师对普及计算机基础技术功不可没,但毕竟老师不是神,因此也避免不了对某些概念有一些错误的理解,<字符编码 ...

  9. 中文乱码之《字符编码:ASCII,Unicode 和 UTF-8》

    参考文献:字符编码笔记:ASCII,Unicode 和 UTF-8 一.ASCII 码 我们知道,计算机内部,所有信息最终都是一个二进制值.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就 ...

随机推荐

  1. (Java基础--反射)框架的概念及用反射技术开发框架的原理

    一.概述 1.框架:通过反射调用Java类的一种方式.  (框架与房子非常类似,使用的用户写的程序写配置文件,就相当于给房子装修) 如房地产商造房子用户住,门窗和空调等等内部都是由用户自己安装,房子就 ...

  2. 2018HDU多校联赛第六场 6373 Pinball——水题&&物理题

    题意 给定一个斜面,从某处让一个小球作自由落体运动,求小球与斜面的碰撞次数(假设都为弹性碰撞). 分析 题图如下,x轴.y轴是虚拟的. 根据高中物理的套路,沿斜面方向分解重力加速度即可. #inclu ...

  3. Codeforces Round #551 (Div. 2) E. Serval and Snake (交互题)

    人生第一次交互题ac! 其实比较水 容易发现如果查询的矩阵里面包含一个端点,得到的值是奇数:否则是偶数. 所以只要花2*n次查询每一行和每一列,找出其中查询答案为奇数的行和列,就表示这一行有一个端点. ...

  4. python 关键参数和默认值

    def hello_key(greeting='hello', name='world'): print('%s, %s' % (greeting, name)) hello_key() hello_ ...

  5. js的数组在内存中是如何存储的

    前言:本来想自己总结下,但发现以下文章已经写得很好,就直接放链接了. 英文文章:http://voidcanvas.com/javascript-array-evolution-performance ...

  6. 简单的switch插件

    页面效果: 这个switch使用纯CSS实现,小巧简单 css代码 /* switch */ /* 开关样式 */ label.bui-switch-label .bui-switch { width ...

  7. oracle行转列和列转行(pivot 和 unpivot 函数,wm_concat函数 )

    create table demo(id int,name varchar(20),nums int); ---- 创建表insert into demo values(1, '苹果', 1000); ...

  8. TypeError: Data location must be "memory" for return parameter in function, but none was given.

      在用truffle编译智能合约时,报错 TypeError: Data location must be "memory" for return parameter in fu ...

  9. hTTP的URL编码

    使用jdk提供的类完成URL的编解码 public class UrlDemo { public static void main(String[] args) throws Exception { ...

  10. 数据分析 - Excel 配色, 绘图, 技巧

    美学 配色 画图本身是美学的展示, 出色的配色是必须的 虽然本身美学并不是数据分析的必要, 但是也不能太low 如果做的太丑展示也是很尴尬 配色网站 点击这里 配置 现版本的 excel 中已存在较为 ...