为什么String.prototype.normalize()方法在部分场景下无法生效?
问题原因解答
核心原因是 String.prototype.normalize() 的NFC合并规则有前提条件:只有Unicode官方预先定义了对应「基础字符+组合标记」的预组合单字符时,才会执行合并操作,也就是描述里的「可行的情况下」的具体含义。
- 第一个示例中的
\u006E(小写字母n)+\u0303(组合波浪符)的组合,在Unicode中有对应的预组合字符ñ(码点U+00F1),符合合并条件,所以normalize执行后两个码点会被合并为单个码点,字符串长度变为1。 - 第二个示例中的
\u0057(大写字母W)+\u0303(组合波浪符)的组合,Unicode字符集从未收录对应的独立预组合字符,不满足合并前提,所以normalize不会做任何合并操作,两个码点依然独立存在,字符串长度保持为2。
你看到的现象不是方法失效,只是你用的字符组合不在Unicode定义的可合并组合范围内而已。
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

