Главная arrow Проекты arrow Конвертер русских строк для ЖКИ  
28.05.2017 г.
Главная
Проекты
Статьи
Начинающим
Архив новостей
Ссылки
Контакты
Поиск
Файлы
Форум
Карта сайта
Авторизация





Забыли пароль?
Ещё не зарегистрированы? Регистрация
Поддержи наш сайт!
Через WebMoney

 R785211844650
 Z210696637574
 E368177590409

Простые устройстваОтличные товары по превосходным ценамОтличные товары по превосходным ценам
Конвертер русских строк для ЖКИ Печать E-mail
Рейтинг: / 4
ХудшаяЛучшая 
Автор ARV   
16.11.2009 г.

При разработке программ для микроконтроллеров, выводящих информацию на ЖКИ, возникает проблема с несовпадением кодировки русских букв в знакогенераторе ЖКИ и кодировки редактора исходных текстов программы (обычно, Win-1251).

Конечно, некоторые ЖКИ имеют знакогенераторы, русские символы в которых совпадают по кодам с кодировкой Windows, но что делать, если ЖКИ не такой? Во многих ЖКИ русские символы вообще не представляют собой сплошного массива - там присутствуют только символы, начертание которых не совпадает с английскими, например, "Б", "Ю" и т.п. В этом случае перекодировка - не такой тривиальный процесс.

 

Известен ряд утилит, которые позволяют перекодировать текст в соответствии с кодировкой ЖКИ, но в этом случае понять по исходному тексту программы, что именно будет выведено, практически невозможно: строка "ЖИЗНЬ" может быть заменена на нечто в таком роде "\196\145\201H\234" - узнать первоначальный текст практически невозможно.

Утилита LCD-CONV свободна от многих недостатков известных перекодировщиков и обладает следующими основными характеристиками:

  • перекодировка происходит непосредственно перед компиляцией, при этом текст программы не меняется
  • таблица перекодировки может настраиваться пользователем произвольно
  • программа работает в консольном режиме.

Утилита ищет во входном файле текстовые вхождения в двойных кавычках (как принято задавать строковые константы в Си) и производит их преобразование в соответствии с заданными правилами.

По умолчанию осуществляется транслитерация русских символов (ж - zh, я - ja и т.д.), но таблицу преобразования русских символов можно сделать произвольной.

Поиск строк ведется с учетом того, что двойные кавычки могут находиться и в комментариях - такие вхождения не преобразуются.

Поиск осуществляется при помощи регулярных выражений, по умолчанию ведется поиск по выражению ".+?", но можно использовать и любое иное выражение. Это позволяет преобразовывать не все строки подряд, а только используемые опреджеленным образом, например:

#define convert(x) x
char s[] = "проверка";
char s2[] = convert("проверка");

Если для этого примера запустить LCD-CONV с параметрами по умолчанию, то значения s и s2 будут преобразованы. Однако, если задать регулярное выражение для поиска в таком виде convert\(.+?\) то s не будет преобразована, а s2 - будет.

ВНИМАНИЕ: регулярное выражение задается в командной строке, поэтому не должно содержать символа двойной кавычки ".

Если в таблице преобразования не задано соответствие для какого-либо символа, то этот символ копируется в выходной файл без изменения.

Командная строка для запуска утилиты имеет следующий формат:

LCD-CONV [параметры] -s<исходный файл> [-o<выходной файл>] [-t<файл преобразования>]

В качестве параметров могут использоваться следующие:
  -q         - режим работы без вывода в консоль (тихий режим)
  -r<expr>   - задание регулярного выражения expr для поиска и преобразования строк
  -h или -?  - вывод краткой справке по параметрам командной строки

Исходный файл - это любой текстовый файл в кодировке Win-1251. Утилита умеет обнаруживать комментарии в стиле Си (т.е. /* */ и //) и не обрабатывать вхождения строк внутри комментариев.

Выходной файл может отсутствовать, в этом случае имя выходного файла получается из имени входного путем добавления к его расширению "_c", т.е. из "main.c" получится "main.c_c". Выходной файл, если он существует, перезаписывается без дополнительных предупреждений.

Файл преобразования (так же может отсутствовать) - это обычный текстовый файл, каждая строка которого задает способ преобразования символов в следущем формате: СИМВОЛ=ЗАМЕНА.

СИМВОЛ - это исходный символ кириллицы в кодировке Win-1251, а ЗАМЕНА - это набор любых символов, которыми заменяется исходный

Например, допустимы следующие строки в таблице преобразований:

А=A
Ы=\240
Ю=\0xF0

Разумеется, ЗАМЕНА не должна содержать недопустимых символов для языка Си (и русских букв, само собой).

 

Я думаю, что будет удобно вставить запуск этой утилиты для нужных файлов проекта в makefile, а компилировать уже те файлы, которые будут получены в итоге. В этом случае исходный текст в вашем редакторе будет содержать русские строки в привычной для вас кодировке Windows, а в скомпилированный файл попадут уже перекодированные строки. Таким образом обеспечивается удобство разработки и нужный результат.

Скачать утилиту, как обычно, можно из файлового архива.
Обсудить материал на форуме. (0 сообщений)


Добавить в любимые (0) | Просмотров: 20297

  Коментарии (5)
 1 Написал(а) Настя, в 20:08 11.05.2010
> Известен ряд утилит 
Сошлитесь на них. 
 
> понять по исходному тексту... практически невозможно 
Комментируйте исходник. 
 
> char s[] = «проверка»; 
чтобы это сработало нужен lcd-conv 
... не кошерно 
 
а не проще вместо «\196\145\201H\234» или «проверка» 
сразу написать «ѕpoіepєa»
 2 Написал(а) Настя, в 20:09 11.05.2010
а можно весь текст выше и так написать ))) 
 
> Ґ·іecїeЅ pЗг yїё»ёї 
CoБ»ёїecД Ѕa Ѕёx. 
 
> ѕoЅЗїД ѕo ёcxoгЅoјy їeєcїy... ѕpaєїёАecєё Ѕeіo·јo¶Ѕo 
KoјјeЅїёpy№їe ёcxoгЅёє. 
 
> char s[] = ѕpoіepєa; 
АїoІГ Еїo cpaІoїa»o Ѕy¶eЅ lcd-conv 
... Ѕe єoБepЅo 
 
a Ѕe ѕpoжe іјecїo 196145201H234 ё»ё ѕpoіepєa 
cpa·y ЅaѕёcaїД poepa
 3 Написал(а) ARV, в 07:21 13.05.2010
ценю ваш юмор. ха-ха.
 4 Написал(а) Александр, в 14:46 09.08.2012
A еще вариант чистА кирилица.... не знаю автора , но я ему благодарен OЧЕНЬ 
const unsigned char kirilTable[64]= { 
0x41, 0xA0, 0x42, 0xA1, 0xE0, 0x45, 0xA3, 0xA4, 0xA5, 0xA6, 0x4B, 0xA7, 0x4D, 0x48, 0x4F, 0xA8, 
0x50, 0x43, 0x54, 0xA9, 0xAA, 0x58, 0xE1, 0xAB, 0xAC, 0xE2, 0xAD, 0xAE, 0xAD, 0xAF, 0xB0, 0xB1, 
0x61, 0xB2, 0xB3, 0xB4, 0xE3, 0x65, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0x6F, 0xBE, 
0x70, 0x63, 0xBF, 0x79, 0xE4, 0x78, 0xE5, 0xC0, 0xC1, 0xE6, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7}; 
void dd_lcd(flash unsigned char *mas, unsigned char len ) //В функцию 
//передаём параметры: mas - текст который выводим, len - его длина 
{ unsigned char i,P; 
 
for (i=0;i 0x7F) P=kirilTable[mas[i]-0xC0]; 
lcd_putchar(P); 


////////// 
а вот так вывод текста 
lcd_gotoxy(1,2); 
dd_lcd("ПРОВЕРКА ЗАВЕРШЕНА",18);
 5 Написал(а) Александр, в 14:48 09.08.2012
сорри... тут цифра 18 длинна выводимой строки земенил смайлик 
lcd_gotoxy(1,2); 
dd_lcd("ПРОВЕРКА ЗАВЕРШЕНА", 1 8 );

Только зарегистрированные пользователи могут оставлять коментарии.
Пожалуйста зарегистрируйтесь или войдите в ваш аккаунт.

 
« Пред.   След. »
Полезные материалы по сходным темам
BannerFans.com