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

Arduino接收HTML数据时非ASCII字符(如@)URL编码还原问题

解决Arduino接收URL编码字符的问题

你遇到的是URL编码问题,%40是@的URL编码形式。下面提供两种可行的解决方法:

方法一:在Arduino中实现URL解码函数(逐字符处理)

直接在接收完字符串后对其进行解码,以下是完整的URL解码函数及整合到你代码中的示例:

String urlDecode(String input) {
    String decoded = "";
    char c;
    char code0;
    char code1;
    for (int i = 0; i < input.length(); i++) {
        c = input.charAt(i);
        if (c == '%') {
            i++;
            code0 = input.charAt(i);
            i++;
            code1 = input.charAt(i);
            // 将十六进制字符转为十进制
            c = (hexToInt(code0) << 4) | hexToInt(code1);
        }
        decoded += c;
    }
    return decoded;
}

// 辅助函数:将十六进制字符转为整数
int hexToInt(char c) {
    if (c >= '0' && c <= '9') return c - '0';
    if (c >= 'A' && c <= 'F') return c - 'A' + 10;
    if (c >= 'a' && c <= 'f') return c - 'a' + 10;
    return 0;
}

// 你的原有代码整合解码逻辑
String requestBody;

while(client.available()){
   requestBody += (char)client.read();
}

if(requestBody.length()){
   String decodedBody = urlDecode(requestBody);
   Serial.println(decodedBody); // 输出test@essai
}

这个函数会逐字符扫描字符串,遇到%时就将后续两个十六进制字符转换为对应的ASCII字符,可解决@及其他URL编码字符的解码问题。

方法二:上游避免URL编码(推荐)

如果可以控制数据发送端(HTML页面),可以从根源上避免编码问题:

  • 若用GET请求,修改前端代码,不对发送的内容做URL编码;
  • 更推荐改用POST请求,以application/json或multipart/form-data格式发送数据,这类格式不会对@等特殊字符进行URL编码,Arduino接收后直接就是原始字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:50:29