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

toLowerCase与normalize的执行顺序是否会影响Unicode字符串处理?

当然存在这样的文本对!

答案是肯定的——确实有text1和text2能让这两个归一化函数的处理结果出现「一方相同、另一方不同」的情况。我给你举个具体的、可复现的例子:

  • 设text1 = "İ"(这是Unicode字符U+0130,土耳其语中带点的大写I)
  • 设text2 = "I\u0307"(大写字母I,加上单独的点标记U+0307,也就是İ的NFD分解形式)

我们一步步拆解两个函数的处理结果:

先看normalize(text)(NFD分解 → 转小写)

  • 处理text1:"İ".normalize("NFD")会把预合成的İ拆成"I\u0307",接着.toLowerCase()把大写I转成小写i,最终得到"i\u0307"。
  • 处理text2:text2本身已经是NFD分解状态,.normalize("NFD")不会改动它,之后.toLowerCase()把大写I转成小写i,结果同样是"i\u0307"。
    → 此时normalize(text1) === normalize(text2),两者完全相同。

再看normalize1(text)(转小写 → NFD分解)

  • 处理text1:"İ".toLowerCase()会直接转为普通的小写"i"(JavaScript默认的toLowerCase对U+0130的处理规则就是转为U+0069),之后.normalize("NFD")对普通小写i没有分解效果,最终结果是"i"。
  • 处理text2:"I\u0307".toLowerCase()把大写I转成小写i,得到"i\u0307",接着.normalize("NFD")保持这个分解形式不变,结果是"i\u0307"。
    → 此时normalize1(text1) !== normalize1(text2),两者明显不同。

这个例子完美符合你描述的「一方相同另一方不同」的场景。反过来的情况(normalize结果不同但normalize1结果相同)也存在,比如调整一下文本对就能实现,但上面的例子已经足够证明存在性了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:30:14