【发布时间】:2016-10-02 10:47:07
【问题描述】:
我正在使用以下转换器对不在“正常”平面中的 Unicode 字符进行拆分。
function toUTF16Pair(x) {
var first = Math.floor((x - 0x10000) / 0x400) + 0xD800;
var second = ((x - 0x10000) % 0x400) + 0xDC00;
return '\\u'+first.toString(16) + '\\u'+second.toString(16);
}
我正在寻求性能改进(如果可能的话)。
【问题讨论】:
-
您是否考虑过迭代、创建新字符/代码点的数组并在最后加入它们?由于 JS 字符串是不可变的,这可能会更快。
-
@ssube 它们在一堆“正常”的 unicode 中,我想在我确实有链的情况下,这可能是值得的,但我仍然会先阅读它们以识别它们是 UTF32那些。
-
我会将您的替换调用转换为
hex.forEach类型循环并通过原样传递“好”代码点,但是当您遇到一个最终会成对出现的点时,请改为返回该对.获取结果并join他们一次。 -
请告诉我们你是如何调用这个函数的。
-
@Bergi 嗨,Bergi,它可以不同,通常是一些 jquery 选择
.text()拆分;或者它可以是symbol.getCharCodeAt(0).toString(16)。检查if (x >= 0x10000 && x <= 0x10FFFF)在函数之外,如果字符不在,它不会被调用。我想我会将问题缩小到仅实际算法位,并将删除检查并替换为干净的十六进制代码,因为其他位确实可以单独查看。
标签: javascript performance unicode