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
相关产品推荐
相关产品推荐

