Программирование ARM Перекодировка русского текста из UTF-8 в CP1251 Sat, July 19 2025  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Перекодировка русского текста из UTF-8 в CP1251 Печать
Добавил(а) microsin   

Большинство современных средств разработки для микроконтроллеров (VScode, Eclipse, IAR, CodeVision, Keil, список можно продолжать) сохраняют тексты исходного кода в кодировке UTF-8. В этом случае встает проблема вывода на различные индикаторы русского текста, потому что необходима 8-битная кодировка символов. Чаще всего это кодировка CP1251 (Windows-1251).

Конечно, обойти эту проблему можно путем предварительной подготовки для русского текста специальных массивов байт в нужной кодировке, и затем их выводить на индикатор. Но намного удобнее было бы непосредственно использовать строковые константы в исходном коде, которые хранятся в UTF-8. Для перекодировки текста из UTF8 в CP1251 можно применить отличную библиотеку [1].

Пример использования библиотеки:

#include < stdio.h>
#include "Adafruit_GFX.h"
#include "utf8_to_cp1251.h"

#define oledprintf(...) { \ char temp_utf8[256]; \ char cp1251txt[256]; \ int len; \ sprintf(temp_utf8, __VA_ARGS__); \ len = convertUtf8ToCp1251(temp_utf8, cp1251txt); \ for (uint8_t idx=0; idx < len; idx++) \ { \ symwrite(cp1251txt[idx]); \ } \ }

uint8_t y = 0; setCursor(0, y); oledprintf("Привет, мир!"); y += SYMHEIGHT*textsize; setCursor(0, y); oledprintf("min: %.0f", (float)min/SAMPLE_RATE_HZ); y += SYMHEIGHT*textsize; setCursor(0, y); oledprintf("max: %.0f", (float)max/SAMPLE_RATE_HZ); y += SYMHEIGHT*textsize; setCursor(0, y); oledprintf("сред: %.0f", (float)avg/SAMPLE_RATE_HZ);

[Ссылки]

1. utf8_to_cp1251.
2. Как делать шрифты для устройств на микроконтроллерах.
3. Обзор шрифтов библиотеки u8glib.
4. u8glib: шрифты и работа со строками текста.
5. IAR 8.30: русский текст в редакторе кода.
6. Русификация индикатора LCD на чипе Hitachi 44780.
7. Русский шрифт для LCD AM-480272H3TMQW-T01H.
8. Проблема вывода на однострочный LCD BC1601A1 (16x1).
9. IAR EW ARM: как перенаправить вывод printf и putchar.

 

Добавить комментарий


Защитный код
Обновить

Top of Page