Русская кодировка в HTTP запросах ESP8266WebServer

DyadyaGenya
Offline
Зарегистрирован: 23.06.2022

Доброго времени суток. Продолжаю разбираться с насущными на данном этапе для меня вопросами. Настраиваю HTTP ответы/запросы на ESP8266. Допустим в первом случае хочу выводить статус реле (индикатора, светодиода) вместе с каким-то коментарием на русском языке. Или ту же страницу 200 отсылать с русским текстом. Чтобы в браузере вывелось что-то типа:

void handleRoot() {

  server.send(200, "text/plain", "Большой привет от esp8266!");

}

Или:

// Обработка HTTP-запросов
  server.on("/relay_switch", [](){                                        // При HTTP запросе вида адрес/relay_switch
    server.send(200, "text/plain", relay_switch()+" переключили");                     // Отдаём клиенту код успешной обработки запроса, сообщаем, что формат ответа текстовый и возвращаем результат выполнения функции relay_switch 
}); 
  server.on("/relay_status", [](){                                        // При HTTP запросе вида адрес/relay_status
    server.send(200, "text/plain", relay_status()+" ага ");                     // Отдаём клиенту код успешной обработки запроса, сообщаем, что формат ответа текстовый и возвращаем результат выполнения функции relay_status 
});

По идее в файле ESP8266WebServer.h за это отвечают следующие строки:

typedef struct {
  HTTPUploadStatus status;
  String  filename;
  String  name;
  String  type;
 // String  inputstream;  // типа кодировка вывода сообщений, которую я пробовал добавить
  size_t  totalSize;    // total size of uploaded file so far
  size_t  currentSize;  // size of data currently in buf
  size_t  contentLength; // size of entire post request, file size + headers and other request data.
  uint8_t buf[HTTP_UPLOAD_BUFLEN];
} HTTPUpload;

Тоесть тут описывается только три параметра, а я пробовал добавить четвертый. По идее нужно его ещё где-то прописать, но не могу понять где.

Возможно я лезу в дебри, и все гораздо проще. И не нужно править библиотеку, а этот параметр прописывается где-то в другом месте.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

В чем вопрос то? Я не понял.

sadman41
Offline
Зарегистрирован: 19.10.2016
DyadyaGenya
Offline
Зарегистрирован: 23.06.2022

BOOM пишет:

В чем вопрос то? Я не понял.

Да, плохой из меня объясняльщик )))

Как вывести в браузере на русском вот эту запись:

  server.send(200, "text/plain", "Большой привет от esp8266!");

И ещё парочка примеров в первом посте. На англ все пишет нормально. На русском пишет кракозябры.

DyadyaGenya
Offline
Зарегистрирован: 23.06.2022

И как это передать в HTTP реквесте? Вернее для ардуино в HTTP реквесте

Тоесть варианты типа:

  server.send(200, "text/plain", "Привет от esp8266!", "charset=utf-8");
  server.send(200, "text/plain", "Привет от esp8266!", charset="utf-8");
  server.send(200, "text/plain", "Привет от esp8266!", charset=utf-8);

не работают

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Для кодировки есть специальный тег. Почитай за структуру html-документа. Это не сложно и не долго. ))))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016
nik182
Offline
Зарегистрирован: 04.05.2015

BOOM пишет:

Для кодировки есть специальный тег. Почитай за структуру html-документа. Это не сложно и не долго. ))))

Достаточно в хроме нажать F12 даже на этой странице и посмотреть как оформлен head. Там всё есть для нормального отображения. И строка ua6em присутствует.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

nik182 пишет:

BOOM пишет:

Для кодировки есть специальный тег. Почитай за структуру html-документа. Это не сложно и не долго. ))))

Достаточно в хроме нажать F12 даже на этой странице и посмотреть как оформлен head. Там всё есть для нормального отображения. И строка ua6em присутствует.

а ты думаешь откуда я скопировал )))

nik182
Offline
Зарегистрирован: 04.05.2015

ua6em пишет:

а ты думаешь откуда я скопировал )))

:-)

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

DyadyaGenya пишет:

Как вывести в браузере на русском вот эту запись:

  server.send(200, "text/plain", "Большой привет от esp8266!");

Как простой вариант попробовать:

ua6em пишет:

"text/html; charset=utf-8"

Или например вот так еще (мне кажется более правильно):

server.send(200, "text/html", "<!DOCTYPE html><html><head><title>Меня увидешь в шапке вкладки браузера</title><meta charset='utf-8'></head><body><h1>Реально Большой привет от esp8266!)))</h1></body></html>");

А вообще изучи структуру страницы html...

rkit
Offline
Зарегистрирован: 23.11.2016

"text/plain; charset=utf-8"

DyadyaGenya
Offline
Зарегистрирован: 23.06.2022

ua6em пишет:

"text/html; charset=utf-8" 

 

То, что нужно ))) А я никак не мог придумать, куда вставить.  Если вы обратили внимание, то ставил отдельным параметром, выносил за кавычки. Это конечно мое упущение знаний HTTP запросов/ответов.

DyadyaGenya
Offline
Зарегистрирован: 23.06.2022

BOOM пишет:

Для кодировки есть специальный тег. Почитай за структуру html-документа. Это не сложно и не долго. ))))

Спасибо за подсказку, но про этот параметр я знаю. Вопрос был в том, что я НЕ ЗНАЛ, КУДА ЕГО ВСТАВИТЬ.

DyadyaGenya
Offline
Зарегистрирован: 23.06.2022

rkit пишет:

"text/plain; charset=utf-8"

Вам тоже спасибо. Коротко и ясно. Подробности свей ошибки написал постом выше

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

DyadyaGenya пишет:

 я НЕ ЗНАЛ, КУДА ЕГО ВСТАВИТЬ.

- Гусары! Молчать!

(ведь вроде уже большой мальчик?)

DyadyaGenya
Offline
Зарегистрирован: 23.06.2022

wdrakula пишет:

DyadyaGenya пишет:

 я НЕ ЗНАЛ, КУДА ЕГО ВСТАВИТЬ.

- Гусары! Молчать!

(ведь вроде уже большой мальчик?)

Ну это кто о чем подумал )))