Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Keil и русские строковые константы
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
MiklPolikov
Устройство должно создавать на SD карте текстовые файлы с русским текстом.
В Keil MDK 5.14 задаю строковую константу "АБВГД". Кейл компилирыет её как
D0 90 D0 91 D0 92 D0 93 D0 94
В то же время, если я в Windows создаю текстовый файл c текстом АБВГД, то его содержимое
C0 C1 C2 C3 C4
Вопрос: как сделать так, что бы Кейл при компиляции создавал из "АБВГД" C0 C1 C2 C3 C4 ?

Подробнее:
Текстовый файл с содержимым D0 90 D0 91 D0 92 D0 93 D0 94 в Windows открывается корректно. Но если его в Windows пересохранить, то в его начало почему-то добавляется EF BB BF
А уже эти EF BB BF , при следующем открытии на некоторых компьютерах с древними Windows, превращают текст в "крякозябры".

Заранее спасибо за совет !
ViKo
Так это у вас unicode шрифт выбран в настройках. А чтобы нормально ANSI шрифт рисовался, нужно UvEdit.dll подменить.
MiklPolikov
Цитата(ViKo @ Apr 3 2015, 21:47) *
Так это у вас unicode шрифт выбран в настройках. А чтобы нормально ANSI шрифт рисовался, нужно UvEdit.dll подменить.

Объясните пожалуйста подробнее, что именно нужно сделать ?
scifi
Про кодировки текста ничего не слышали? Windows-1251? UTF-8?
Не знаю, как там в кейловском текстовом редакторе, но в нормальном редакторе можно задать кодировку по выбору. Выберите Windows-1251, чтобы было по 1 байту на букву, и скажите компилятору, что исходник именно в этой кодировке. Если, конечно, компилятор не настолько туп, что не понимает разные кодировки. Точно знаю, что gcc понимает.
MiklPolikov
Цитата(scifi @ Apr 3 2015, 21:50) *
Не знаю, как там в кейловском текстовом редакторе,

Нужен совет того, кто знает.
ViKo
Цитата(MiklPolikov @ Apr 3 2015, 21:48) *
Объясните пожалуйста подробнее, что именно нужно сделать ?

Вот здесь усё...
Spider
Я уж думал в наши дни никого кодировками не удивить. А тут вон оно что...
MiklPolikov
Сделал всё что было написано в архиве, и ничего не изменилось:
1) Запустил файл FontSubstitutes.reg , увидел сообщение " ... успешно внесены в реестр"
2) Перезагрузил компьютер. ( windows 8)
3) Заменил в папке файл с / keil_v5 / UV4 файл UvEdit.dll

В кейле, вот в этом меню, от выбора кодировки почему-то ничего не меняется. Как будто кейл игнорирует эту настройку.

Какие будут предложения ?
kolobok0
Цитата(MiklPolikov @ Apr 3 2015, 23:37) *
...Какие будут предложения ?


проверить на создании нового файла исходников. Не всегда настройка в сетупе среды есть фаза записи. Зачастую это фаза создания.
Это собственно и корректное поведение. В какой кодировке был создан файл - в такой и будет дальше пытаться поддерживаться
(принцип "не навреди").

Либо перезапишите исходный файлик программкой которая тупо запишет как бинарный выход (нотепад к примеру, очистив первые
байты заголовок BOM). Можно заюзать нотепад++ но тут бывают нюансы. Бывает его глючит. Он вроде как пишет кодировку одну,
а записывает совсем другую. Спасает внимательность - если в первой позиции файла поставить курсор и нажать стрелку вправо - то
при глюке ничего не произойдёт(скрытый байт). Если всё нормально - курсор переместиться.
MiklPolikov
Спасибо всем ответившим !
Уже написал функцию-костыль, для перекодировки того что выдаёт Кейл в то что понимает Windows .
Когда перестанет работать - попробую то что предложил kolobok0

Код
//////////////////////////////////прибавляем строку к строке/////////////////////////////////
//  *sum   строка - результат
//   *add  исходная строка
void STRING_TO_STRING(unsigned char *sum, unsigned char *add)
{
   int i,j;
    unsigned char x;
  unsigned char previous_x=0;

    j=0;
    i=0;
    
   while(i<SD_DATA_SIZE)
   {
        if(add[j]==0)
            break;

         x=add[j];
         if((x!=0xD0)  && (x!=0xD1))
         {
            if((x>=0x90) && (previous_x==0xD0))  /// буквы  абвгдАБВГД  и т.п.
               x+=0x30;

            if((x>=0x80) && (previous_x==0xD1))  // буквы   фычшщФЫЧШЩ   и тп.
               x+=0x70;

            sum[i]=x;
            i++;
         }
         previous_x=x;

         j++;
   }
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.