编程基础:《编码》、操作系统(维基百科)、《数据结构与算法分析》、《代码大全》。
硬件----操作系统----浏览器----HTML/CSS/JS
“你好”----1110 0100 1011 1101 1010 0000 1110 0101 1010 0101 1011 1101
↓
匹配制字符集,转换为二进制
进制转换 —— 存储数字(涉及负数 - 补码;小数 - 浮点数)
ASCII美国信息交换标准代码 —— 存储字符
GB2312 中国国家标准简体中文字符集 :6763个汉字、682字符。—— 存储中文
Unicode字符集:128237个字符。—— 存储所有字符
(为实现存储空间优化,通过不同编码方式来存储,如:UTF-8)
a > 00000000 00000000 00000000 01100001(2) = 0061(16)
你 > 00000000 00000000 01001111 01100000(2) = 4F60(16)
UTF-8 (编码方式,非字符集。具体转换方式见文末。)
a > 01100001
你 > 11100100 10111101 10100000
JavaScript 采用了 Unicode字符集,非UTF-8编码方式。原因:涉及到编码方式出现的历史年份问题。
作者:邱昊宇
链接:https://www.zhihu.com/question/23374078
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
简单来说:
Unicode 是「字符集」
UTF-8 是「编码规则」
其中:
字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point)
编码规则:将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)广义的 Unicode 是一个标准,定义了一个字符集以及一系列的编码规则,即 Unicode 字符集和 UTF-8、UTF-16、UTF-32 等等编码……
Unicode 字符集为每一个字符分配一个码位,例如「知」的码位是 30693,记作 U+77E5(30693 的十六进制为 0x77E5)。
UTF-8 顾名思义,是一套以 8 位为一个编码单位的可变长编码。会将一个码位编码为 1 到 4 个字节:U+ 0000 ~ U+ 007F: 0XXXXXXX
U+ 0080 ~ U+ 07FF: 110XXXXX 10XXXXXX
U+ 0800 ~ U+ FFFF: 1110XXXX 10XXXXXX 10XXXXXX
U+10000 ~ U+1FFFF: 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX
根据上表中的编码规则,之前的「知」字的码位 U+77E5 属于第三行的范围: 7 7 E 5 =
0111 0111 1110 0101 二进制数
0111 011111 100101
1110XXXX 10XXXXXX 10XXXXXX 模版(上表第三行)
11100111 10011111 10100101 代入模版
UTF-8 十六进制 E 7 9 F A 5
这就是将 U+77E5 按照 UTF-8 编码为字节序列 E79FA5 的过程。反之亦然。