Unicode与JavaScript

315 阅读2分钟

image.png

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字节。

image.png

  • 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字节字符的错误问题。

参考:www.ruanyifeng.com/blog/2014/1…