Skip to content

设置maxLines的时候如果文本内容含有生僻字,可能会造成while死循环 #422

@Hanks-Wang

Description

@Hanks-Wang
Image

遇到的问题是因为生僻字"𨫎"是一个**代理对(Surrogate Pair)**字符,这导致了字符串长度计算的异常。

  1. 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('');

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions