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

Ionic5 Angular iOS环境下文件名é替换为%CC%81失效问题

解决Ionic5 Angular iOS项目中文件名é替换失效的问题

这问题我之前帮朋友排查过!核心坑点在于é这个字符在Unicode里有两种完全不同的编码形式:一种是单个预合成的U+00E9(就是你正则里写的那个),另一种是基础字符e(U+0065)加上组合重音符◌́(U+0301)——这俩看起来一模一样,但底层编码完全不同,你的正则只覆盖了第一种情况,碰到第二种组合式的é就没辙了。

给你两个靠谱的解决方案:

方案1:正则同时匹配两种编码形式

直接把两种可能的é都写进正则里,确保全覆盖:

// 匹配预合成é和组合式e+重音符
const regex = /é|e\u0301/gi;
fileName = fileName.replace(regex, "%CC%81");

方案2:先归一化字符编码(更稳妥)

利用JavaScript的String.normalize()方法,把字符串统一转换成标准形式,再替换就不会漏了:

// 先将字符串归一化为分解形式NFD,把所有带重音的字符拆成基础字符+重音符
fileName = fileName.normalize('NFD');
// 匹配所有组合重音符U+0301
const regex = /\u0301/gi;
fileName = fileName.replace(regex, "%CC%81");

// 也可以归一化为预合成形式NFC,再匹配预合成é
// fileName = fileName.normalize('NFC');
// const regex = /é/gi;
// fileName = fileName.replace(regex, "%CC%81");

在iOS环境下,系统处理文件名时可能会自动转换字符的编码形式,所以方案2的归一化方式会更稳妥,能应对所有场景。

内容的提问来源于stack exchange,提问作者Réda Youssoufi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:54:05