我正在尝试将JSON发送到带有ESP8266的Arduino模块。我有一个简单的Web服务器,它等待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):
来自电路板的Char数组有效负载:
答案 0 :(得分:2)
ESP8266WebServer
库正在将+
解码为空格字符。
在发送之前,您需要对JSON字符串进行URL编码。
在vanilla JavaScript中,您需要使用encodeURIComponent
请勿使用encodeURI
,因为它不会对+
进行编码
无论您使用什么,请确保将+
字符编码为%2b
。
这也可以帮助您避免在JSON中涉及?
,&
和=
的潜在问题。