• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Обмен текстом в кирилице между ESP8266 и браузером

Vovka

Member
Доброго времени суток.
В общем нужно сделать чтоб так работало с русскими буквами:
ввожу в браузере текст, чем-то его кодирую, передаю в ESP. В ESP сохраняю в массив.
Потом в ESP декодирую, использую...
Далее этот текст кодирую и передаю в браузер, который это дело раскодирует и выводит...
Подскажите, пожалуйста, чем воспользоваться на обеих сторонах и желательно чтоб не сильно передаваемые данные увеличивал?
 

pvvx

Активный участник сообщества
Зачем что-то кодировать-декодировать для текста? Достаточно объявить кодировку UTF-8
 

Vovka

Member
Увы, но в данном случае не вариант
Единственное, что попроще нашел, так это encodeURI() и decodeURI(), но вот один символ кодируется пятью - моноговато...
 

nikolz

Well-known member
Увы, но в данном случае не вариант
Единственное, что попроще нашел, так это encodeURI() и decodeURI(), но вот один символ кодируется пятью - моноговато...
если текст - это конечный набор фраз, то можно записать их в таблицу на флеш и передавать номер строки в таблице.
 

pvvx

Активный участник сообщества
Увы, но в данном случае не вариант
Единственное, что попроще нашел, так это encodeURI() и decodeURI(), но вот один символ кодируется пятью - моноговато...
А зачем передавать текст в URL или URN?
В websocket и других вариантах можно передавать и принимать данные в любом формате.
 

Vovka

Member
В websocket и других вариантах можно передавать и принимать данные в любом формате.
Проверил - через websocket приходят крякозябры :(
А дело в особенностях:
Код:
<input type="text" id="ttt">
 document.getElementById("ttt").value
Так что придется через encodeURI(), а это вместо одной русской буквы пишется аж шесть символов!
 

pvvx

Активный участник сообщества
Проверил - через websocket приходят крякозябры :(
В websocket есть и бинарные данные.
А "кракозябы" из-за применения разной таблицы кодировки.
И чтобы была возможность поддержки большинства языков и рекомендовал UTF-8

А дело в особенностях:
Код:
<input type="text" id="ttt">
document.getElementById("ttt").value
Так что придется через encodeURI(), а это вместо одной русской буквы пишется аж шесть символов!
Не видно никаких проблем:
HTML:
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Привет, мир!</title>
</head>
<body>
<input type="text" id="ttt">
<script>
const text = "Привет, мир!";
document.getElementById("ttt").value = text;
</script>
</body></html>
 

pvvx

Активный участник сообщества
Методов передачи данных в HTML мульоны.
HTML:
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Привет, мир!</title>
</head>
<body>
<input type="text" id="ttt">
<script>
fetch('file.json')
  .then(response => response.json())
  .then(data => {
    console.log(data);
    document.getElementById("ttt").value = data.tt;
  })
  .catch(error => console.error('Ошибка при загрузке JSON:', error));
</script>
</body></html>
file.json:
JSON:
{"tt":"Привет, мир!"}
1752348904826.png

В json по умолчанию обычно используется UTF-8
 

pvvx

Активный участник сообщества
POST json
HTML:
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Post Json</title>
</head>
<body>
<input type="text" id="ttt"> <button type="button" onclick="PostJson();">POST</button>
<script>
fetch('file.json')
  .then(response => response.json())
  .then(data => {
    console.log(data);
    document.getElementById("ttt").value = data.tt;
  })
  .catch(error => console.error('Ошибка при загрузке JSON:', error));

function PostJson() {
  const object = { };
  object.tt = document.getElementById("ttt").value;
  const json = JSON.stringify(object);
fetch('file2.json', {
     method: 'POST',
     headers: {
       'Content-Type': 'application/json'
     },
     body: json
   })
   .then(response => response.json())
   .then(data => console.log(data))
   .catch(error => console.error('Ошибка:', error));
}

</script>
</body></html>
Сервер должен обрабатывать POST и Json
 

Vovka

Member
В общем выяснил в чем дело!!!
Даже если кодировка страницы указана как Windows-1251, то русский текст браузер передает в кодировке UTF-8
При этом хитро передает: если это английский алфавит, то передает буква=байт, а если русские буквы, то буква=2байта!
Т.е. чем-то напоминает encodeURI() кодирование...
 
Сверху Снизу