I'm trying to send JSON to an Arduino module with a ESP8266. I have a simple web server, which waiting for JSON with SSID and password where device must connect.
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
}
What if password contains non ASCII characters? How can I handle request content to put this arguments to method:
WiFi.begin(ssid, pass);
Edit:
Example: If I send JSON like:
{"pass": "test+test"}
Then, when I print this payload I don't get a + sign (but this is ASCII sign)
Request (wireshark):
Char array payload from board:


The
ESP8266WebServerlibrary is decoding+into a space character.You need to URL encode the JSON string, before sending it.
In vanilla JavaScript you need to use
encodeURIComponent.Don't use
encodeURI, because it doesn't encode+.Whatever you use, make sure the
+character is encoded into%2b.This will also save you from potential problems, involving
?,&and=inside your JSON.