ECMAScript[Effective JavaScript 笔记] 第7久:视字符串为16号之代码单元序列

Unicode编码,基础:它呢世界上具备的亲笔系统的每个字符单位分配一个唯一的平头,该整数介于0~1114111里面,在Unicode术语中叫代码点(code
point)。

暨外字符编码几乎从未外例外(例如ASCII)。

今非昔比在于ASCII将每个索引映射为唯一的二进制表示,但Unicode允许多只不等二上制编码的代码点。

今非昔比之编码在讲求存储的字符串数量和操作速度之间展开衡量。

脚下太风靡的Unicode编码方式有:UTF-8,UTF-16,UTF-32。

Unicode因历史之数据,错误的量了代码点的善范围。

早期,认为只有需要216代码点,所以来了UCS-2,其也16各类编码的本来标准。一个代码点可以容纳16各之数字,简单的道是以代码点与那编码元素一针对同地投起来,这名叫一个代码单元(code
unit)。

UCS-2凡由独立的16各项的代码单元构成,每个代码单元对应一个独的Unicode代码点。这种编码方法的重中之重利益在于索引字符串是一模一样种植代码小的,固定时间之操作。获取有字符串的第n独代码点只是简单概括地选择数组的第n单16各元素。

脚示例:

ECMAScript 1

这个字符串,里面的每个字符由最初的16位范围中的代码点组成。对Unicode字符串,代码点和编码元素能完全匹配

JS字符串采用当下16各编码每一个素。若果还维持20世纪90年间初的做法,JS字符串的每个元素或对应一个独的代码点。

Unicode从216扩张及了220只代码点。新长后底界定被组织为17独分寸为216代码点的子范围。

先是个头范围,称为主干多文种平面,包含最初的216独代码点。余下的16个限称为帮扶平面

倘代码点的限制扩展了,UCS-2就转换得过时了。它用通过扩张来代表这些附加的代码点。基替代者UTF-16和它相仿。

UTF-16采用代理对代表附加的代码点。一针对性16各项之代码单元共同编码一个相当于或超过216的代码点。(有硌乱,是这般吧。一个摄对顶两单16号的代码单元。一个代码单元是代码点与那编码元素一对同地投。)

选个例:

高音谱号“ECMAScript 2”的代码点为U+1D11E(代码点数119070底Unicode的惯用16进制写法)

该由UTF-16格式的代码单元0xd834暨0xddle共同表示。可透过联合这简单只代码单元选择的各项来针对代码点进行解码。(这种编码保证了这些代理对毫无会跟中的BMP代码点混淆,甚至从字符串中间的有位置进行搜索,也堪随时识别一个摄对。)

ECMAScript 3

由UTF-16的每个代码点编码需要一个要么个别个16员之代码单元,因此UTF-16是千篇一律种植而换长的编码

  • 长度为n的字符串在内存中之轻重变化基于字符串特定的代码点。
  • 搜寻字符串中之第n独代码点不再是一个固定时间之操作。
  • 寻用由字符串的起来开展。

当Unicode扩大范围时,JS已经下了16各之字符串元素。字符串属性和方式还是依据代码单元层级,而无是代码点层级。

从而当字符串包含辅助平面中的代码点时,js将每个代码点表示也零星只要素如无是一个(一对UTF-16代理对之代码点)

一个js字符串的因素是一个16员之代码单元。

领取字符串的某个字符得到的是代码单元,而无是代码点。

正则表达式也工作吃代码单元层级。其单字符模式(“.”)匹配一个十足的代码单元。

JS内置的字符串数据类型工作让代码单元层级,但这并无可知挡住一些API意识及代码点和代理对。一些正规的ECMAScript库正确地拍卖了代理对。

URI操作函数:sendcodeURI,decodeURI,encodeURIComponent和decodeURIComponent。

提示

  • js字符串是出于16号的代码单元构成,而非是由于Unicode代码点组成。
  • js使用简单个代码单元代表216和该上述的Unicode代码点。这点儿单代码单元被叫作代理对。
  • 代办对甩开了字符串元素计数,length,charAt,charCodeAt方法和正则表达式模式中了震慑。
  • 采取第三正在的库房编写而识别代码点的字符串操作。
  • 当使用一个带有字符串操作的库时,都需查阅该库文档,看类似处理代码点的整整范围。

后记

当时节看得自身万分蒙B,整不太亮,我平常的办事环境面临,也尚无赶上了这点的BUG。

页面编码是utf-8或gbk的,是否足以不用考虑地方说之?

当今仅是领略当内存的积存过程被,每种情形相应的囤积方。

再度惦记越的,可以友善重新失网上检索材料看了。

尤其看

网上搜寻了几只勾就上头的篇章,有趣味自己失去读吧。

  1. #### 简单易行几词话总结Unicode,UTF-8和UTF-16

  2. ### Unicode(UTF-8, UTF-16)令人歪曲的定义

  3. 缘何 UTF-8 编码比 UTF-16
    编码应用还广泛?

  4. ### UTF-8 GBK UTF8 GB2312 之间的分及涉