hg0088注册-365bet欢迎您! ·设为首页 ·加入收藏 ·站点地图
当前位置: 主页 > 微商货源 >

JavaScript若何准确处理Unicode编码后果

2020-03-29 来源: 原创 作者:admin

  Fundebug经授权转载,版权归原作者一切。

  JavaScript 处理 Unicode 的方法至少可以说是令人惊讶的。本文说清晰明了 JavaScript 中的 处理 Unicode 相干的痛点,供给了罕见后果的处理计划,并说清晰明了ECMAScript 6 规范若何改良这类状况。

  在深化研究 JavaScript 之前,先说明一下 Unicode 一些基础常识,如许在 Unicode 方面,我们至少都了解一些。

  Unicode 是今朝绝大年夜少数依次应用的字符编码,定义也很复杂,用一个 码位(code point) 映照一个字符。码位值的范围是从 到 ,可以表现超越 110 万个字符。下面是一些字符与它们的码位。

  码位 平日被格局化为十六进制数字,零填充至少四位数,格局为 。

  Unicode 最前面的 65536 个字符位,称为 基本多文种平面(BMP-—Basic Multilingual Plane),又简称为“零号平面”, plane 0),它的 码位 范围是从 到 。最罕见的字符都放在这个平面上,这是 Unicode 最早定义和宣布的一个平面。

  剩下的字符都放在 **辅佐平面(Supplementary Plane)**或许 星形平面(astral planes) ,码位范围从 不时到 ,共 16 个辅佐平面。

  辅佐平面内的码位很轻易识别:假设需求超越 4 个十六进制数字来表现码位,那么它就是一个辅佐平面内的码。

  现在对 Unicode 有了基本的了解,接上去看看它若何应用于 JavaScript 字符串。

  在谷歌控制台输入以下:

  以下称为十六进制转义序列。它们由援用婚配码位的两个十六进制数字构成。例如, 码位为 表现大年夜写字母 A。这些转义序列可用于 到 范围内的码位。

  异样罕见的还有以下类型的转义:

  这些被称为 Unicode转义序列。它们由表现码位的 4 个十六进制数字构成。例如, 表现码位为 表现一个心。这些转义序列可以用于 到 范围内的码位,即全部基本平面。

  然则其他的一切辅佐平面呢? 我们需求 4 个以上的十六进制数字来表现它们的码位,那么若何转义它们呢?

  在 ECMAScript 6中,这很复杂,因为它引入了一种新的转义序列: Unicode 码位转义。例如:

  在大年夜括号之间可以应用最多 6 个十六进制数字,这足以表现一切 Unicode 码位。因此,经过应用这类类型的转义序列,可以基于其代码位轻松转义任何 Unicode 码位。

  为了向后兼容 ECMAScript 5 和更旧的情况,不幸的处理计划是应用代理对:

  在这类状况下,每个转义表现代理项一半的码位。两个代理项就构成一个辅佐码位。

  留心,代理项对码位与原始码位全分歧。有公式可以依据给定的辅佐码位来计算代理项对码位,反之亦然——依据代理对计算原始辅佐代码位。

标签: