реклама на сайте
подробности

 
 
> Проблема с русскими шрифтами библиотеки u8glib
sergeus
сообщение Sep 12 2016, 09:21
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 157
Регистрация: 11-12-07
Из: Москва
Пользователь №: 33 174



Здравствуйте.

Никак не могу разобраться с проблемой вывода русского шрифта на дисплей (128*64 ssd1306)

u8g_DrawStr(&u8g, 0, 25, "АБВГДЕЖЗИЙКЛМНОП"); - выводит текст РСТУФХЦЧШЩЪЫЬЄЮЯ
u8g_DrawStr(&u8g, 0, 38, "РСТУФХЦЧШЩЪЫЬЭЮЯ"); - выводит текст абвгдежзийклмноп

Таблица символов этого шрифта (картинкой): http://radiomanoff.at.ua/u8g_font_unifont_0_8.png

Пытался задавать смещение в строковые символы - но понятно, что в Atmel Studio русские шрифты хранятся в UTF-8 или др. кодировке и соотв. требуется два байта для хранения и простым инкрементированием/декрементированием значения символа не обойтись.

Пытался также сам создавать шрифт по данной инструкции (используя bdf2u8g.exe): http://microsin.net/programming/avr/u8glib...s-overview.html - но результат тот же. Опять выводимые символы смещены на 16 символов относительно необходимых.

Выводимые данные храню в строке, типа: char output_s[] = "абвгде АБВГД 123456";

Помогите, пожалуйста, разобраться, как быть со шрифтами.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sergeus
сообщение Sep 12 2016, 10:43
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 157
Регистрация: 11-12-07
Из: Москва
Пользователь №: 33 174



АНТОХА, спасибо за помощь!

Сделал, как вы советовали и получилось.
Оказывается код у меня написан в windows-1251, а дисплей понимает в ISO-8859-5.

Я в редакторе Notepad++ создаю текст в кодировке ISO-8859-5 и потом перекодирую в windows-1251, т.е. делаю обратную конвертацию.

Не совсем удобно конечно смотреть на кракозябры в компиляторе char text[] = "їаШТХвт"; - но зато на дисплее "Привет".
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Sep 12 2016, 11:00
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(sergeus @ Sep 12 2016, 13:43) *
Не совсем удобно конечно смотреть на кракозябры в компиляторе char text[] = "їаШТХвт"; - но зато на дисплее "Привет".

Сделайте свой внутренний перекодировщик и всегда вызывайте его перед выводом на экран. Тогда у вас будет понятно что в исходнике и то что нужно при выводе на дисплей.
Метод универсальный и очень удобный. Программист должен думать о программе, а не тратить время на перекодирование текста в кракозяблы.
Если уж идет борьба за вычислительные мощности (хотя в 99% случаев это борьба надуманная и ненужная для функции вывода на экран) - то после отладки перекодируете все тексты в исходнике в выводимые кракозяблы, а функцию конвертера переопределите как пустышку через #define.
Go to the top of the page
 
+Quote Post
sergeus
сообщение Sep 12 2016, 11:29
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 157
Регистрация: 11-12-07
Из: Москва
Пользователь №: 33 174



Руслан, не подскажите, какие-нибудь ссылки, на то как реализовать.
Я нашел только одну статью: http://delphisite.ru/faq/perekodirovanie-i...irovok-v-drugie

Возник еще вопрос, char word[] = "Абвгд";
как физически записывается этот код во флэш память - он занимает сколько байт, верно ли я понимаю, что русские буквы занимают по 2байта (если и английские с русскими то тоже по 2)?

Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 12:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01403 секунд с 7
ELECTRONIX ©2004-2016