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

Keil и русские строковые константы

Устройство должно создавать на 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, превращают текст в "крякозябры".

 

Заранее спасибо за совет !

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


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

Так это у вас unicode шрифт выбран в настройках. А чтобы нормально ANSI шрифт рисовался, нужно UvEdit.dll подменить.

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


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

Так это у вас unicode шрифт выбран в настройках. А чтобы нормально ANSI шрифт рисовался, нужно UvEdit.dll подменить.

Объясните пожалуйста подробнее, что именно нужно сделать ?

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


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

Про кодировки текста ничего не слышали? Windows-1251? UTF-8?

Не знаю, как там в кейловском текстовом редакторе, но в нормальном редакторе можно задать кодировку по выбору. Выберите Windows-1251, чтобы было по 1 байту на букву, и скажите компилятору, что исходник именно в этой кодировке. Если, конечно, компилятор не настолько туп, что не понимает разные кодировки. Точно знаю, что gcc понимает.

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


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

Не знаю, как там в кейловском текстовом редакторе,

Нужен совет того, кто знает.

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


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

Объясните пожалуйста подробнее, что именно нужно сделать ?

Вот здесь усё...

Rus_font_dll.zip

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


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

Я уж думал в наши дни никого кодировками не удивить. А тут вон оно что...

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


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

Сделал всё что было написано в архиве, и ничего не изменилось:

1) Запустил файл FontSubstitutes.reg , увидел сообщение " ... успешно внесены в реестр"

2) Перезагрузил компьютер. ( windows 8)

3) Заменил в папке файл с / keil_v5 / UV4 файл UvEdit.dll

 

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

 

Какие будут предложения ?

post-24702-1428093448_thumb.jpg

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


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

...Какие будут предложения ?

 

проверить на создании нового файла исходников. Не всегда настройка в сетупе среды есть фаза записи. Зачастую это фаза создания.

Это собственно и корректное поведение. В какой кодировке был создан файл - в такой и будет дальше пытаться поддерживаться

(принцип "не навреди").

 

Либо перезапишите исходный файлик программкой которая тупо запишет как бинарный выход (нотепад к примеру, очистив первые

байты заголовок BOM). Можно заюзать нотепад++ но тут бывают нюансы. Бывает его глючит. Он вроде как пишет кодировку одну,

а записывает совсем другую. Спасает внимательность - если в первой позиции файла поставить курсор и нажать стрелку вправо - то

при глюке ничего не произойдёт(скрытый байт). Если всё нормально - курсор переместиться.

 

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


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

Спасибо всем ответившим !

Уже написал функцию-костыль, для перекодировки того что выдаёт Кейл в то что понимает 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++;
   }
}

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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