Как работать с символами юникода с помощью символьных ЖК-дисплеев?

8

Я хотел бы купить ЖК-экран от Arduino, чтобы отобразить некоторые результаты веб-http-звонка; Web API возвращает текст в формате JSON, закодированный в UTF-8.

Я читал, что ICU - это способ обработки Unicode в программах на C / C ++ для Arduino.

Мои вопросы:
Смогу ли я отображать символы UTF-8 на этот вид экрана ?
Есть ли (доступные) символьные ЖК-экраны, способные отображать символы UTF-8?

systempuntoout
источник
3
Мы говорим о графическом отображении или отображении сегментированных символов? На сегментированном дисплее вы, очевидно, не можете отобразить любой тег, который не соответствует шаблону сегмента. Для «западного» использования, не относящегося к ascii, вы, вероятно, можете вернуться к базовому (без акцента и т. Д.) Символу. Для других сценариев вам скорее всего не повезло.
drxzcl

Ответы:

6

Я не так хорошо знаком с Arduino, но давайте посмотрим на это с точки зрения ЖК-дисплея.

В настоящее время практически все популярные символьные ЖК-дисплеи используют контроллер HD44780 (это то, что поддерживает библиотека LiquidCrystal ). Этот контроллер не поддерживает UTF-8 напрямую, каждый символ представлен одним байтом.

Таким образом, вам нужно конвертировать UTF-8 в 8-битные символы вручную. Контроллер имеет встроенный генератор символов с 208 5x8 и 32 5x10 символами, плюс до 8 пользовательских символов (см. CreateChar ). Вам необходимо сопоставить каждый входной символ с одним из предопределенных / пользовательских символов - очевидно, вы можете отображать только подмножество символов UTF8, вам нужно решить, какие символы вы хотите / можете отобразить.

Само преобразование должно быть довольно простым - вам просто нужно перебрать строку UTF8, отображая каждый символ в один байт. Скорее всего, вы захотите использовать справочные таблицы для простоты. Дайте мне знать, если это требует дальнейшего объяснения.

Художники кода
источник
благодарю вас; Как вы думаете, этот вид графического дисплея Tft может предложить лучшую поддержку юникода?
systempuntoout
1
Насколько я вижу, это графический дисплей, поэтому он может отображать практически все, что вы захотите. Предоставленная библиотека также предоставляет функции для рисования текста, но, опять же, она поддерживает только 8-битные символы. Таким образом, с этим отображением вам нужно либо выполнить тот же вид преобразования, что и описанный выше, и использовать библиотеку как есть, либо вам нужно изменить библиотеку для поддержки UTF8. Имейте в виду, что использование графического дисплея сделает ваш код больше - вам понадобится дополнительная библиотека, шрифт и т. Д. Но по крайней мере у вас есть полный контроль над доступным набором символов - шрифт является частью программного обеспечения.
Художники кода
4

Юникод сложен и велик, в целом он слишком велик для Arduino. В текущей версии в общей сложности более 100000 символов, включая клинопись, иероглифы, клингон и не говоря уже о многих тысячах китайских символов.

Так что если вы действительно хотите показать несколько символов Юникода на Arduino:

  • Получите графический дисплей. Тот, который вы упоминаете, является отображением символов, он может отображать только фиксированный набор из 256 символов.

  • Определите небольшое подмножество символов, которые вы хотите обработать. Есть несколько предопределенных подмножеств, например, многоязычные европейские подмножества выглядят хорошо.

  • Получить несколько шрифтов и раздеть их до нужного набора. Обратите внимание, что даже отображение может быть намного сложнее, чем то, к чему вы привыкли в ASCII, из-за сочетания символов, двунаправленной записи и тому подобного. Лучше всего придерживаться латинских символов без сочетания акцентов. С кириллицей и греческим тоже должно быть все в порядке, как и с любой последовательностью символов слева направо.

  • Может быть, вы могли бы использовать внешнюю память для хранения шрифтов.

Тогда есть множество других тем, которые вам, вероятно, не нужны, например, сортировка и поиск, см. Стандарт Unicode и его приложения (он большой!).

Забудьте ICU, ему нужны мегабайты памяти.

starblue
источник
Я должен попытаться поставить (подмножество!) ICU на Arduino .. должно быть весело.
Стивен Р. Лумис