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

 
 
> Keil и русские строковые константы, 0xEF 0xBB 0xBF
MiklPolikov
сообщение Apr 3 2015, 18:27
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



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

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


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 9)
ViKo
сообщение Apr 3 2015, 18:47
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Так это у вас unicode шрифт выбран в настройках. А чтобы нормально ANSI шрифт рисовался, нужно UvEdit.dll подменить.
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Apr 3 2015, 18:48
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



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

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


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 3 2015, 18:50
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Про кодировки текста ничего не слышали? Windows-1251? UTF-8?
Не знаю, как там в кейловском текстовом редакторе, но в нормальном редакторе можно задать кодировку по выбору. Выберите Windows-1251, чтобы было по 1 байту на букву, и скажите компилятору, что исходник именно в этой кодировке. Если, конечно, компилятор не настолько туп, что не понимает разные кодировки. Точно знаю, что gcc понимает.
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Apr 3 2015, 18:54
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата(scifi @ Apr 3 2015, 21:50) *
Не знаю, как там в кейловском текстовом редакторе,

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


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 3 2015, 19:03
Сообщение #6


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



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

Вот здесь усё...
Прикрепленные файлы
Прикрепленный файл  Rus_font_dll.zip ( 340.6 килобайт ) Кол-во скачиваний: 31
 
Go to the top of the page
 
+Quote Post
Spider
сообщение Apr 3 2015, 19:20
Сообщение #7


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



Я уж думал в наши дни никого кодировками не удивить. А тут вон оно что...
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Apr 3 2015, 20:37
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



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

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

Какие будут предложения ?
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Apr 3 2015, 21:40
Сообщение #9


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



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


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

Либо перезапишите исходный файлик программкой которая тупо запишет как бинарный выход (нотепад к примеру, очистив первые
байты заголовок BOM). Можно заюзать нотепад++ но тут бывают нюансы. Бывает его глючит. Он вроде как пишет кодировку одну,
а записывает совсем другую. Спасает внимательность - если в первой позиции файла поставить курсор и нажать стрелку вправо - то
при глюке ничего не произойдёт(скрытый байт). Если всё нормально - курсор переместиться.
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Apr 3 2015, 22:18
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



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


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post

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

 


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


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