Используйте суррогатную пару символов Unicode в Arduino IDE

Я пишу скетч для Wemos D1 Mini, чтобы отображать веб-страницу. Это работает, и я могу отображать символы Unicode, но если я попытаюсь использовать их с суррогатными парами, такими как 🔊, я получу ошибку компиляции;

 s += "\uD83D\uDD0A";

Ошибка

\uD83D не является допустимым универсальным символом

Как мне получить этот символ в моем коде?

, 👍1


2 ответа


0

После нескольких проб и ошибок я добился этого, используя стиль Python u"\U0001F50A" без ведущей буквы u, конечно

 s += "\U0001F50A";

Жаль, что я не подумал о том, чтобы загуглить сообщение об ошибке, это сэкономило бы мне время.

,

Можно ли использовать в исходном коде чистые символы UTF-8? Это риск, потому что все должно уметь их обрабатывать. Я думаю, это должно работать. По крайней мере, этот форум может обрабатывать чистые символы UTF-8: ±10 °C, 10 мкм, 1 кОм, ¿, @Jot

На самом деле, можно. Я даже не пробовал., @Musa


1

В C++11 есть новая замечательная функция, которая называется строковый литерал, этот пример показывает, как использовать его с любым однострочным или многострочным текстом или текстом utf8. Вы просто определяете начальную и конечную последовательность, в следующем случае --- (начальная последовательность становится R"---( и конечная последовательность )---") и убедитесь, что эта последовательность не появляется в инкапсулированном тексте. Это отлично подходит для интеграции веб-сайтов в проекты arduino:

static const char _index_html[] PROGMEM = R"---(
<html>
<head>
<link rel="icon" type="image/png" href="/favicon.png"/>
</head>
<body>
...
</body>
</html>
)---";
,

Хорошо, но какое отношение это имеет к SMP? Или к чему-либо за пределами ASCII, если уж на то пошло?, @Ignacio Vazquez-Abrams

Если бы он использовал любой редактор с поддержкой Unicode, он мог бы просто копировать/вставлять любые символы Unicode, не заботясь о том, как их кодировать - нет необходимости использовать экранирующие последовательности. Также этот ответ показывает, как легко интегрировать многострочный HTML-код в проект Arduino, @gabonator