我正在尝试使用 ESP8266 将 JSON 发送到 Arduino 模块。我有一个简单的网络服务器,它在设备必须连接的地方等待带有 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):
来自开发板的字符数组负载:
最佳答案
ESP8266WebServer
库正在将 +
解码为空格字符。
在发送之前,您需要对 JSON 字符串进行 URL 编码。
在 vanilla JavaScript 中你需要使用 encodeURIComponent
.
不要使用 encodeURI
,因为它不编码 +
.
无论您使用什么,请确保将 +
字符编码为 %2b
。
这也将使您避免潜在的问题,涉及 JSON 中的 ?
、&
和 =
。
关于c - ESP8266 Arduino 请求内容编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41148167/