JavaScript拆分含特殊符号阿拉伯字符串时如何保持字符原有顺序
阿拉伯字符串逐字符拆分顺序错乱解决方案
问题根源
阿拉伯语属于Unicode双向(BiDi)文本,默认遵循从右到左的渲染规则,原有按字符串索引逐位遍历的写法存在两个问题:
- JavaScript字符串基于UTF-16码元存储,直接按索引取值时,遇到占用两个码元的特殊符号、阿拉伯语连体附加字符会被错误拆分
- 控制台输出数组时会自动触发双向文本排版规则,会让你视觉上觉得字符顺序混乱,这其中既有拆分逻辑错误的因素,也有渲染层的显示干扰
正确处理方法
使用支持Unicode码点迭代的内置方法拆分字符串即可,这类方法会完整保留所有可见字符、特殊符号、不可见双向控制符的原有逻辑顺序,不会出现内容丢失或拆分错误:
const str = "- زيادة زمن التصويب تحت المنظار (+۱۰%)"; // 写法1:通过Array.from拆分 const arr = Array.from(str); // 写法2:通过扩展运算符拆分,效果和Array.from完全一致 // const arr = [...str]; console.log(arr);
注意事项
如果控制台打印数组时视觉上仍觉得顺序不对,可以通过循环逐个打印「索引+对应字符」的方式验证,数组内实际存储的字符顺序和原字符串逻辑顺序完全一致,视觉错乱只是控制台对双向文本的自动排版效果,不会影响后续业务逻辑处理。
内容的提问来源于stack exchange,提问作者Kruton
相关产品推荐
相关产品推荐

