Перейти к содержанию
    

TouchGFX, Keil и русские буквы

Господа, проблема с русскими буквами в Keil общеизвестна и легко решается. Я после установки сделал все как прописано - у меня в редакторе русские буквы, все нормально.

Но вот в touchGFX с этим проблема. Русские тексты, вставленные в редакторе TOuchGFXDesigner, отображаются нормально. А вот если русский текст набирать ручками в KEIL и грузить из чего-то вроде

const char* MenuItemList[10] = {"Элемент1","Элемент2","Элемент3"};

То отображаются вопросики.

 

Как побороть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, MementoMori сказал:

Как побороть?

Разбирайтесь, в каких кодировках кодирует кейл, под виндой скорее всего 1251, а TOuchGFXDesigner может использовать модный юникод...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 minutes ago, x893 said:

Так поставьте в Keil UTF-8 и проверьте.

Может стать забавно. В редакторе все хорошо показывает, а строки в два раза длиннее в байтах становятся и на индикатор всякая ерунда идет в железе. Избегал этого усложнением сборки проекта. Все строковые значения из проекта собирал в один файл. У меня был gcc+make+eclipse. В makefile была добавлена цель, которая этот файл до компиляции из UTF-8 в CP1251 конвертировала.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 hours ago, x893 said:

Так поставьте в Keil UTF-8 и проверьте.

Спасибо, Кэп!

Еще вчера поставил. Найдете на картинке результат набора русских букв с клавиатуры и результат отображения на экране?

 

G33v50kR.png?download=1

 

Слазил еще раз в папку установки Keil. ОБнаружил там альетрнативный UVEdit.dll

В редакторе все стало на места, в TouchGFX - нет

 

WKFUQeOn.png?download=1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насильственно перекодировал файл в UTF-8, открыл его в KEIL - русские буквы в норме, а вот в итоговом приложении - знаки вопроса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, MementoMori said:

Насильственно перекодировал файл в UTF-8, открыл его в KEIL - русские буквы в норме, а вот в итоговом приложении - знаки вопроса.

В какой кодировке TOuchGFXDesigner сохраняет ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

48 minutes ago, x893 said:

В какой кодировке TOuchGFXDesigner сохраняет ?

Хехе))) Как же я ждал этого вопроса))))

Вот в такой:

TEXT_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::Unicode::UnicodeChar texts_all_languages[] TEXT_LOCATION_FLASH_ATTRIBUTE =
{
    0x423, 0x43f, 0x440, 0x430, 0x432, 0x43b, 0x435, 0x43d, 0x438, 0x435, 0x2, 0x0, // @0 "??????????<>"
    0x41e, 0x442, 0x43a, 0x43b, 0x44e, 0x447, 0x438, 0x442, 0x44c, 0x20, 0x43c, 0x43e, 0x442, 0x43e, 0x440, 0x44b, 0x0, // @12 "????????? ??????"
    0x413, 0x41b, 0x410, 0x412, 0x41d, 0x42b, 0x419, 0x20, 0x42d, 0x41a, 0x420, 0x410, 0x41d, 0x0, // @29 "??????? ?????"
    0x42d, 0x43a, 0x441, 0x442, 0x440, 0x443, 0x434, 0x435, 0x440, 0x20, 0x31, 0x0, // @43 "????????? 1"
    0x42d, 0x43a, 0x441, 0x442, 0x440, 0x443, 0x434, 0x435, 0x440, 0x20, 0x32, 0x0, // @55 "????????? 2"
    0x422, 0x415, 0x41c, 0x41f, 0x415, 0x420, 0x410, 0x422, 0x423, 0x420, 0x410, 0x0, // @67 "???????????"
    0x422, 0x435, 0x43c, 0x43f, 0x435, 0x440, 0x430, 0x442, 0x443, 0x440, 0x430, 0x0, // @79 "???????????"
    0x423, 0x43f, 0x440, 0x430, 0x432, 0x43b, 0x435, 0x43d, 0x438, 0x435, 0x0, // @91 "??????????"
    0x41d, 0x430, 0x20, 0x434, 0x438, 0x441, 0x43f, 0x43b, 0x435, 0x435, 0x0, // @102 "?? ???????"
    0x42d, 0x43a, 0x441, 0x442, 0x440, 0x443, 0x434, 0x435, 0x440, 0x44b, 0x0, // @113 "??????????"
    0x41e, 0x441, 0x442, 0x430, 0x43b, 0x43e, 0x441, 0x44c, 0x3a, 0x0, // @124 "????????:"
    0x41d, 0x430, 0x441, 0x442, 0x440, 0x43e, 0x439, 0x43a, 0x438, 0x0, // @134 "?????????"
    0x41d, 0x430, 0x20, 0x43f, 0x43b, 0x430, 0x442, 0x435, 0x0, // @144 "?? ?????"
    0x4e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x0, // @153 "New Text"
    0x41f, 0x415, 0x427, 0x410, 0x422, 0x42c, 0x0, // @162 "??????"
    0x41f, 0x435, 0x447, 0x430, 0x442, 0x44c, 0x0, // @169 "??????"
    0x414, 0x430, 0x442, 0x447, 0x438, 0x43a, 0x0, // @176 "??????"
    0x421, 0x442, 0x43e, 0x43b, 0x438, 0x43a, 0x0, // @183 "??????"
    0x30, 0x33, 0x3a, 0x35, 0x30, 0x0, // @190 "03:50"
    0x414, 0x418, 0x421, 0x41a, 0x418, 0x0, // @196 "?????"
    0x2d, 0x30, 0x2e, 0x31, 0x0, // @202 "-0.1"
    0x2b, 0x30, 0x2e, 0x31, 0x0, // @207 "+0.1"
    0x2b, 0x31, 0x30, 0x0, // @212 "+10"
    0x2d, 0x31, 0x30, 0x0, // @216 "-10"
    0x2b, 0x31, 0x0, // @220 "+1"
    0x2d, 0x31, 0x0 // @223 "-1"
};

Он тупо сообщает компилятору куда и какие коды писать)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

25 minutes ago, MementoMori said:

Хехе))) Как же я ждал этого вопроса))))

Хехе ))) Как же я жду этого ответа )))

Использовали UTF16 ?

 

0x423, 0x43f, 0x440, 0x430, 0x432, 0x43b, 0x435, 0x43d, 0x438, 0x435, 0x2, 0x

Управление

 

Всё элементарно профессор

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, x893 said:

 

Хехе ))) Как же я жду этого ответа )))

Использовали UTF16 ?

 


0x423, 0x43f, 0x440, 0x430, 0x432, 0x43b, 0x435, 0x43d, 0x438, 0x435, 0x2, 0x

Управление

 

Всё элементарно профессор

Нет, использовал UTF8 Пробовал сохранять в UTF-16 - лабуда.

Кстати, на один символ из константы приходится 2 знака вопроса в итоговом тексте.  Я понимаю, что это как-то связано с UTF8/16, но не пойму что нужно сделать.

 

Я понимаю, что вы с моими кодами сделали некую операцию, но мне хочется набирать в редакторе текст и чтобы он попадал в TouchGFX в нормальном виде.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть в TouchGFX такая штука

xcAYX5yU.png?download=1

 

Я сделал вот что

 

 Unicode::UnicodeChar buffer[20];
	uint8_t buffer2[20];
	Unicode::strncpy(buffer, MenuItemList[data], 20);  //копируем константу из флеши в буфер
	Unicode::toUTF8(buffer, buffer2,20);// конвертируем в UTF-8 и пмещаетм в buffer2
	Unicode::snprintf(OptionsMenuItemtextAreaBuffer, 20, "%s", buffer2);// в итоговый буфер помещаем текст в UTF-8

Это корежит даже латиницу. А.... почему вы решили, что должно быть в UTF-8?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я про UTF8 слова не говорил. По приведенному выше коду, если сделать конвертацию из UTF16, то получится текст Управление.

Так как не все компиляторы понимают строки в UTF16 они сохраняют текст в виде хекс констант 0x4...

Далее рассуждаем логически.

Вы делаете текст в CP1251, компилятор делает массив байт в этой кодировке.

Перед тем как отображать вы должны переделать его в UTF16

Если делаете текст в UTF-8 точно также - сначала в UTF16, потом вывод.

попробуйте написать у себя в коде строку в виде

message = u"Hello-Привет";

(в кодировках файла CP1251, UTF8, UTF16)

и посмотрите во что конкретно она превратится в каждой из кодировок.

 

Удачи !

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 часов назад, MementoMori сказал:

Нет, использовал UTF8 Пробовал сохранять в UTF-16 - лабуда.

Лабуда- не лабуда, а сохранил он именно в UTF-16...

А проблема скорее всего в том, что кейл сохраняет в том формате(UTF-16), который отрисовщик текста не понимает, вот и лабуда получается... Т.е. вам нужно узнать, какой формат понимает именно сама либа, т.к. "Русские тексты, вставленные в редакторе TOuchGFXDesigner, отображаются нормально" - смотрите вчем он и сохраняет, и как поймете, пытайтесь выставить это в кейле.

 

ЗЫ. Как раньше было здорово - всего-то CP-866 и 1251, проверил одну, нет - значит другая, сегодня поднатянуло линуксоидов со своим зоопарком, юникодщиков-интернетчиков, и появилось непролазное болото...

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 hours ago, MementoMori said:

Есть в TouchGFX такая штука

xcAYX5yU.png?download=1

 

Я сделал вот что

 


 Unicode::UnicodeChar buffer[20];
	uint8_t buffer2[20];
	Unicode::strncpy(buffer, MenuItemList[data], 20);  //копируем константу из флеши в буфер
	Unicode::toUTF8(buffer, buffer2,20);// конвертируем в UTF-8 и пмещаетм в buffer2
	Unicode::snprintf(OptionsMenuItemtextAreaBuffer, 20, "%s", buffer2);// в итоговый буфер помещаем текст в UTF-8

Это корежит даже латиницу. А.... почему вы решили, что должно быть в UTF-8?

Что даёт fromUTF8 перед выводом на экран ?

Может книгу прочитать ?

TouchGfx за 24 часа

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 5/18/2020 at 12:21 AM, x893 said:

message = u"Hello-Привет";

В Keil не прокатило:

char text[20]=u"SSS";

../touchgfx/gui/src/containers/optionsmenuscrollistcontainer.cpp(24): error:  #20: identifier "u" is undefined

Какую-то библиотеку надо подключить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...