相关疑难解决方法(0)

BMP之外的JavaScript字符串

BMP是基本的多语言平面

根据JavaScript:好的部分:

JavaScript是在16位字符集的时候构建的,因此JavaScript中的所有字符都是16位宽.

这让我相信JavaScript使用UCS-2(不是UTF-16!)并且只能处理U + FFFF以前的字符.

进一步调查证实了这一点:

> String.fromCharCode(0x20001);
Run Code Online (Sandbox Code Playgroud)

fromCharCode返回Unicode字符时,该方法似乎只使用最低16位.试图获得U + 20001(CJK统一表意文字20001)而不是返回U + 0001.

问题:是否可以在JavaScript中处理后BMP字符?


2011-07-31:来自Unicode支持Shootout的 12个幻灯片:好的,坏的,以及(大部分)Ugly很好地解决了与此相关的问题:

javascript unicode utf-16 surrogate-pairs astral-plane

38
推荐指数
1
解决办法
1万
查看次数

为什么在 ECMAScript 6 中 U+D800 和 U+DBFF 之间的代码点会生成一个长度的字符串?

我越来越糊涂了。为什么在使用 ECMAScript 6 本机 Unicode 帮助程序时,从 U+D800 到 U+DBFF 的代码点编码为单个(2 个字节)字符串元素?

我不是在问 JavaScript/ECMAScript 如何本地编码字符串,我问的是一个额外的功能来编码使用 UCS-2 的 UTF-16。

var str1 = '\u{D800}';
var str2 = String.fromCodePoint(0xD800);

console.log(
  str1.length, str1.charCodeAt(0), str1.charCodeAt(1)
);

console.log(
  str2.length, str2.charCodeAt(0), str2.charCodeAt(1)
);
Run Code Online (Sandbox Code Playgroud)

Re- TL; DR:我想知道为什么上述方法返回一个长度为的字符串1。U+D800 不应该生成一个2长度字符串,因为我的浏览器的 ES6 实现在字符串中包含了 UCS-2 编码,每个字符代码使用 2 个字节?

这两种方法都为 U+D800 代码点返回一个单元素字符串(字符代码:55296,与 相同0xD800)。但是对于大于 U+FFFF 的代码点,每个代码点都会返回一个包含两个元素的字符串,即前导和尾随。Lead 将是 U+D800 和 U+DBFF 之间的数字,而我不确定,我只知道它有助于更​​改结果代码点。对我来说,返回值没有意义,它代表了一条没有线索的线索。我理解错了吗?

javascript unicode utf-16 ecmascript-6

0
推荐指数
1
解决办法
667
查看次数