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

替代已废弃escape的编码方案:解决Node.js法语字符适配问题

解决Node.js中提交Latin-1编码字符的问题

问题核心是目标网站表单使用**ISO-8859-1(Latin-1)**编码处理字符,而encodeURIComponent/encodeURI默认用UTF-8编码,导致字符编码不匹配。escape虽然能生成正确结果,但已被废弃,你可以用以下替代方案:

手动实现Latin-1编码函数

直接模拟escape的Latin-1编码逻辑,将字符串转成Latin-1字节后逐个编码:

function latin1Encode(str) {
  const latin1Buffer = Buffer.from(str, 'latin1');
  let result = '';
  for (const byte of latin1Buffer) {
    // 可打印ASCII字符(除%)直接保留,其余转%XX格式
    if (byte >= 32 && byte <= 126 && byte !== 37) {
      result += String.fromCharCode(byte);
    } else {
      result += `%${byte.toString(16).toUpperCase().padStart(2, '0')}`;
    }
  }
  return result;
}

// 测试示例
console.log(latin1Encode('Maevà')); // 输出 Maev%E0

为什么encodeURIComponent不适用?

encodeURIComponent会将字符按UTF-8编码为多字节序列:比如法语字符à在UTF-8中是C3 A0两个字节,因此编码结果是%C3%A0。但目标网站后台是按Latin-1解析,会把这两个字节当成独立字符,导致解析异常。而escape是按Latin-1将à编码为单字节E0,生成%E0,正好匹配网站的解析逻辑。

注意事项

  • 这个方法仅适用于明确知道目标网站使用Latin-1编码的场景,若后续网站切换编码,需要同步调整。
  • 手动实现的函数只处理字符的Latin-1编码,行为和escape一致,但避开了废弃API的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 02:05:01