遇到的问题是因为生僻字"𨫎"是一个**代理对(Surrogate Pair)**字符,这导致了字符串长度计算的异常。
- Unicode代理对机制 :
- "𨫎"的Unicode编码是U+28AEE,属于扩展B区
- 在JavaScript中,这种字符需要用两个16位的代码单元来表示
- 因此 text.length 返回的是代码单元数量,而不是实际字符数量
2 代码在小程序里边的真实表现
var text = "居家园猫、细和天下、软19 16、𨫎";
console.log(text.length); // 19 (因为𨫎占用2个代码单元)
text = text.substring(0, text.length - 1); // 只删除了代理对的后半部分
console.log(text.length); // 还是19,因为前半部分仍然存在
3. 3.
substring的问题 :
- substring(0, text.length - 1) 只删除了代理对的低位代理项
- 高位代理项仍然存在,所以字符串长度没有真正减少
- 这就导致了死循环,因为text.length永远不会变成1
可以用解决办法⬇️ (但是不知道有没有其他的可能的问题)
// 正确的字符数组处理
let chars = Array.from(text);
console.log(chars.length); // 真实字符数量
chars.pop(); // 删除最后一个完整字符
text = chars.join('');
遇到的问题是因为生僻字"𨫎"是一个**代理对(Surrogate Pair)**字符,这导致了字符串长度计算的异常。
- "𨫎"的Unicode编码是U+28AEE,属于扩展B区
2 代码在小程序里边的真实表现
var text = "居家园猫、细和天下、软19 16、𨫎";
console.log(text.length); // 19 (因为𨫎占用2个代码单元)
text = text.substring(0, text.length - 1); // 只删除了代理对的后半部分
console.log(text.length); // 还是19,因为前半部分仍然存在