1.什么是Unicode
Unicode起源:为了将世界上所有的字符都包含在一个集合里,计算机只要支持这个字符集,就能显示所有的字符,不再出现乱码。
2.Unicode内容:
数量:
109449个符号(7.0版)
编号规则:
为每个符号指定一个码点。从0开始,每个号就是1个码点。如:U+0000 代表 null.
分布:
所有的码点分布在17个平面,每个平面65536(2^16)个码点;这17个平面(1个)分为基本平面和辅助平面(16个);
-
基本平面:包含前65536(2^16)个码点.Unicode中最先定义和公布的平面(U+0000-U+FFFF),包含最常见的字符。
-
辅助平面:包含其他16个平面的码点(U+010000-U+10FFFF).
Unicode编码方式:
- UTF-32:用4个字节表示一个字符。优:查找快;缺:浪费空间(所以基本没人用,H5规定不能用此方法)。
- UTF-8:变长编码。一个字符的字节长度由1字节到4字节不等;越常用的字节长度越小(当今互联网最常用此编码方法)。
- UTF-16:变长编码。基本平面每个字符占2字节,辅助平面每个字符占4字节。
- UCS-2:诞生于1990年,最早的Unicode编码方式。只用两个字节来表示已经有码点的字符(因为当时字符集只有一个平面,两字节足够用)。
3.Unicode与JavaScript
- 起初,JavaScript支持Unicode字符,但是编码方式只采用UCS-2。 这是因为JavaScript诞生的时候,字符集只有UCS-2这一种编码方式,其他编码方式还没有。
- UTF-16是整合了UCS-2编码方式后的产物。 在UTF-16编码规则中,Unicode基本平面仍采用UCS-2编码规则,而辅助平面采用每个字符占4个字节的编码方式。即:UCS-2整合进了UTF-16。
- ES6之前: JavaScript只能处理UCS-2编码方式,当一个4字节的字符出现时,JavaScript只能将其当作两个双字节的字符来处理,因而无法返回正确的结果。
- ES6: 大幅增强的Unicode支持,基本解决了之前识别4字节字符的错误问题。