|
Проблема с русскими шрифтами библиотеки u8glib |
|
|
|
Sep 12 2016, 09:21
|

Частый гость
 
Группа: Участник
Сообщений: 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"; Помогите, пожалуйста, разобраться, как быть со шрифтами.
|
|
|
|
|
 |
Ответов
|
Sep 12 2016, 12:03
|

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

|
Цитата Возник еще вопрос, char word[] = "Абвгд"; как физически записывается этот код во флэш память - он занимает сколько байт, верно ли я понимаю, что русские буквы занимают по 2байта (если и английские с русскими то тоже по 2)?
Извините, я не понял вопроса. Почему по 2 байта? Сама по себе кодировка windows-1251 или ISO-8859-5 как я понимаю требует более одного байта на символ, как происходит "проекция" в однобайтные символы, и как потом отличить, например, записанный китайский иероглиф от русской буквы? Как компилятор и библиотека u8glib понимают, что в строке записан русский символ, а не символ другого языка? Впервые столкнулся с работой со шрифтами, поэтому пока такие простые вопросы.
|
|
|
|
|
Sep 12 2016, 13:30
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(sergeus @ Sep 12 2016, 15:03)  Сама по себе кодировка windows-1251 или ISO-8859-5 как я понимаю требует более одного байта на символ, как происходит "проекция" в однобайтные символы, и как потом отличить, например, записанный китайский иероглиф от русской буквы? Как компилятор и библиотека u8glib понимают, что в строке записан русский символ, а не символ другого языка? Впервые столкнулся с работой со шрифтами, поэтому пока такие простые вопросы. Хм, что-то не то Вы прочитали.... это все 8-битовые коды("страницы"), первая же ссылка при гуглении ведет в википедию Цитата Windows-1251 — набор символов и кодировка, являющаяся стандартной 8-битной кодировкой для русских версий Microsoft Windows до 10-й версии. Цитата ISO 8859 — семейство ASCII-совместимых кодовых страниц, разработанное совместными усилиями ISO и IEC. По состоянию на 2006 год это семейство состояло из 15-ти кодовых страниц. кодировка символов и кодовые страницы- это азы, так сказать. Лучше немного почитать и разобраться, если не сталкивались раньше.
|
|
|
|
|
Sep 12 2016, 14:05
|

Начинающий профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648

|
Цитата(Ruslan1 @ Sep 12 2016, 17:30)  кодировка символов и кодовые страницы- это азы, так сказать. Лучше немного почитать и разобраться, если не сталкивались раньше. ISO 8859-5 — 8-битная кодовая страница из семейства кодовых страниц стандарта ISO-8859 для представления кириллицы, это здесь. Речь шла о конкретной странице, а не семействе, которая указана в группе. Использую такой подход для борьбы с кодировками: проект в Eclipse (debian, utf8). В отдельный файл в виде #define вынесены все строки, отображаемые на дисплее в cp1251 (шрифт), название, например, mystring.h. Этот заголовочный файл не включается в файлы с кодом, там включен не существующий файл mystring_1251.h. При сборке программы в makefile указана как одна из целей mystring_1251.h, получаемая вызовом перекодировщика (например, recode) для mystring.h. Проект собирается с сгенерированным файлом в нужной кодировке.
--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
|
|
|
|
Сообщений в этой теме
sergeus Проблема с русскими шрифтами библиотеки u8glib Sep 12 2016, 09:21 AHTOXA Если написать "АБВГДЕЖЗИЙКЛМНОП" в кодир... Sep 12 2016, 10:12 x893 Дебаггером посмотрите, что передается и как рисует... Sep 12 2016, 10:17 sergeus АНТОХА, спасибо за помощь!
Сделал, как вы сов... Sep 12 2016, 10:43 Ruslan1 Цитата(sergeus @ Sep 12 2016, 13:43) Не с... Sep 12 2016, 11:00  sergeus Руслан, не подскажите, какие-нибудь ссылки, на то ... Sep 12 2016, 11:29   Ruslan1 Цитата(sergeus @ Sep 12 2016, 14:29) Русл... Sep 12 2016, 11:49 AHTOXA Нет, и windows-1251 и ISO-8859-5 - это однобайтовы... Sep 12 2016, 13:22   AHTOXA Цитата(mdmitry @ Sep 12 2016, 19:05) Испо... Sep 12 2016, 15:42    mdmitry Цитата(AHTOXA @ Sep 12 2016, 19:42) Я сде... Sep 12 2016, 16:01 sergeus AHTOXA, Ruslan1, спасибо за помощь!
P.S. Ваши... Sep 23 2016, 23:12
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|