首页 > 解决方案 > 我们如何从 UTF-16 中用于表示非 BMP 字符的两个 16 位代码点到 Unicode 中字符的单个代码点?

问题描述

在 ES6 中,当我们codePointAt(0)在其中包含一个字符 ('') 且其 Unicode 码位值大于 U+FFFF(因此不是基本多语言平面的一部分)的字符串上使用时,我们得到码位 134071。字符串实际上仍然有两个代码点,代表这个 134071 值。

> (55362).toString(16)
'd842'
> (57271).toString(16)
'dfb7'
> "\ud842\udfb7"
''
> const j = "\ud842\udfb7"
undefined
> j
''
> j.codePointAt(0)
134071
> j.codePointAt(1)
57271
>

我的问题是我们如何从 55362 和 57271 这两个码点到单个码点 134071。我这里说的是数学关系。

另外,为什么我们仍然可以访问位置 1 的代码点,但我们不能访问位置 0 的单个代码点?

标签: javascriptecmascript-6unicodeutf-16utf

解决方案


推荐阅读