ESP8266 Arduino 请求内容编码

ESP8266 Arduino request content encoding

我正在尝试将 JSON 发送到带有 ESP8266 的 Arduino 模块。我有一个简单的网络服务器,它在设备必须连接的地方等待 JSON 和 SSID 和密码。

ESP8266WebServer server(80);
server.on("/config", HTTP_POST, configHandle);
server.begin();

void handleConfig() {
    String payload = server.arg("plain");
    //convert JSON to char[]
    //parse using jsmn lib
}

如果密码包含非ASCII字符怎么办?我如何处理请求内容以将此参数放入方法:

WiFi.begin(ssid, pass);

编辑:

示例:如果我发送 JSON 比如:

{"pass": "test+test"}

然后,当我打印此负载时,我没有得到 + 符号(但这是 ASCII 符号)

请求(wireshark):

来自开发板的字符数组负载:

ESP8266WebServer 库正在将 + 解码为 space 字符。

您需要 URL 编码 JSON 字符串,然后再发送。

在原版中 JavaScript 你需要使用 encodeURIComponent.
不要使用 encodeURI,因为它不编码 +.
无论您使用什么,请确保 + 字符编码为 %2b.

这也将使您免受潜在问题的困扰,这些问题涉及 JSON.

中的 ?&=