Может кто подскажет как решить следующую проблему ?
В регистрах RW0-RW8 хранится ASCII коды (до 16 символов) кодировка UTF-8
В коде JS они считываются в буфер из 16-ти байт и присваивается строковой переменной.
Проблема заключается в том, что когда строка короче 16 символов, в буфер попадают из регистров RW не пробелы, а какие-то невидимые спецсимволы, которые невозможно удалить никакими функциями JS (.trim(), .replace()) и эти символы передаются в string "chatID'. Это видно по длине строки (которая всегда равна 16.
При ее использовании далее в коде - естественно не инициализируется телеграм бот.
Также обрывается вывод в консоль при попытке вывода в нее нескольких таких переменных.
Проблема решается только вбиванием пробелов во все незаполненные текстом регистры RW и последующим их удалением .trim().
Но это выглядит как-то "криво" и не очевидно для пользователя при вводе RW0-RW8
Может есть какой-то совет - как убрать эти невидимые спецсимволы из буфера?
- Код: Выделить всё
- var chatId = '';
// Read an UTF-8 string
var utf8decoder = new TextDecoder();
driver.getData(this.config.TelegramChatID, 8, (err, data) => {
if (err) {
console.log('Error:', err.message);
} else {
console.log("timestamp:", data.timestamp);
console.log("buffer.byteLength:", data.buffer.byteLength);
var bufferAsUint8Array = new Uint8Array(data.buffer);
chatId = utf8decoder.decode(bufferAsUint8Array); // присваивает 16 байт всегда
chatId = chatId.trim(); // не работает если не пробелы в строке !!!
console.log("chatId:", chatId);
console.log("ChatId lenght:", chatId.length);
}
]);