0

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

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):

在此处输入图像描述

板上的字符数组有效载荷:

在此处输入图像描述

4

1 回答 1

2

ESP8266WebServer库正在解码+为空格字符。

在发送之前,您需要对 JSON 字符串进行 URL 编码。

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

这也将使您避免潜在的问题,包括JSON 中的?&=

于 2016-12-14T18:49:42.697 回答