You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中压缩后Unicode字符串长度差异及Python解压问题

原因分析

这个差异的核心是JavaScript字符串的length属性和Array.from()对Unicode字符的统计逻辑不同:

  • JavaScript字符串本质是UTF-16编码序列,length统计的是UTF-16编码单元的数量。对于U+10000及以上的Unicode字符(超出UTF-16单编码单元范围),需要用**两个UTF-16编码单元(代理对)**来表示,这类字符会被length算成2个长度单位。
  • Array.from(compressed)会按照Unicode码点解析字符串,自动识别代理对并将两个编码单元合并为一个完整的Unicode码点,所以这类字符在数组中只占1个元素位置。

你的情况里,压缩后的字符串恰好包含1个这样的代理对字符:它在compressed.length里被算成2,在codePoints数组里被算成1,因此两者长度差了1(1020-1=1019)。


内容的提问来源于stack exchange,提问作者Psionman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 00:37:22