Как исправить мошеннический вывод смайликов в Arduino IDE 2?

У меня есть относительно простой код, печатающий некоторые смайлики:

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println("Hello world ❤‍♀️‍♂️✔");
}

На случай, если это не очень хорошо отображается, вот изображение того, как это выглядит в Arduino IDE 2.0.3:

Скриншот кода с отображаемыми эмодзи

Однако серийный монитор иногда отображает эмодзи, а иногда нет. Оно варьируется от строки к строке следующим образом:

Hello world �����������������♀�������‍♂️✔����
Hello world ���������������‍♀️‍♂️✔
Hello world ��❤���������������������������������♂���✔
Hello world ❤‍�������‍�������������
Hello world �������‍♀️��������������✔����
Hello world ��������������♀��������️�����������
Hello world ��❤����������‍�����������♂�������✔���

Опять же, вот как это выглядит на моем компьютере с Windows 10:

Скриншот вывода мусора

Я убедился, что это не ошибка скорости передачи данных. И Arduino, и ПК настроены на 9600.

В Arduino IDE 1 выходные данные не красочны, а некоторые смайлики вообще не отображаются, но результат гораздо более последовательный:

Скриншот вывода в Arduino IDE 1

Как исправить зашифрованный вывод в Arduino IDE 2?

, 👍2

Обсуждение

Чтобы было ясно, это проблема с обработкой _любой_ многобайтовой кодировки UTF-8 и, возможно, еще одна проблема вдобавок к этой проблеме с обработкой кластеров графем. Когда я впервые столкнулся с этим, я думаю, что это было при использовании символа градуса для показания температуры (кодовая точка 0xB0), который кодируется в UTF-8 как 0xC2 0xB0. Ваши шансы увидеть символ правильно увеличиваются, если вы используете Serial.flush() и ждете некоторое время до и после многобайтовых кодировок и не задерживаетесь в середине. Другими словами, увеличивается вероятность того, что Serial Monitor получит всю последовательность UTF-8 в одном буфере., @timemage


1 ответ


Лучший ответ:

2

Это проблема Arduino IDE 2.0.3. Об этом сообщается как проблема 589 и выпуск 1405.

Ошибка была исправлена 9 декабря 2022 г. [PR], и я могу подтвердить, что она исправлена в ночная сборка 2.0.4-221229.

,