Конвертер русских строк для ЖКИ |
Автор ARV | |||||||||
16.11.2009 г. | |||||||||
При разработке программ для микроконтроллеров, выводящих информацию на ЖКИ, возникает проблема с несовпадением кодировки русских букв в знакогенераторе ЖКИ и кодировки редактора исходных текстов программы (обычно, Win-1251). Конечно, некоторые ЖКИ имеют знакогенераторы, русские символы в которых совпадают по кодам с кодировкой Windows, но что делать, если ЖКИ не такой? Во многих ЖКИ русские символы вообще не представляют собой сплошного массива - там присутствуют только символы, начертание которых не совпадает с английскими, например, "Б", "Ю" и т.п. В этом случае перекодировка - не такой тривиальный процесс.
Известен ряд утилит, которые позволяют перекодировать текст в соответствии с кодировкой ЖКИ, но в этом случае понять по исходному тексту программы, что именно будет выведено, практически невозможно: строка "ЖИЗНЬ" может быть заменена на нечто в таком роде "\196\145\201H\234" - узнать первоначальный текст практически невозможно. Утилита LCD-CONV свободна от многих недостатков известных перекодировщиков и обладает следующими основными характеристиками:
Утилита ищет во входном файле текстовые вхождения в двойных кавычках (как принято задавать строковые константы в Си) и производит их преобразование в соответствии с заданными правилами. По умолчанию осуществляется транслитерация русских символов (ж - zh, я - ja и т.д.), но таблицу преобразования русских символов можно сделать произвольной. Поиск строк ведется с учетом того, что двойные кавычки могут находиться и в комментариях - такие вхождения не преобразуются. Поиск осуществляется при помощи регулярных выражений, по умолчанию ведется поиск по выражению ".+?", но можно использовать и любое иное выражение. Это позволяет преобразовывать не все строки подряд, а только используемые опреджеленным образом, например:
#define convert(x) x Если для этого примера запустить LCD-CONV с параметрами по умолчанию, то значения s и s2 будут преобразованы. Однако, если задать регулярное выражение для поиска в таком виде convert\(.+?\) то s не будет преобразована, а s2 - будет. ВНИМАНИЕ: регулярное выражение задается в командной строке, поэтому не должно содержать символа двойной кавычки ". Если в таблице преобразования не задано соответствие для какого-либо символа, то этот символ копируется в выходной файл без изменения. Командная строка для запуска утилиты имеет следующий формат: LCD-CONV [параметры] -s<исходный файл> [-o<выходной файл>] [-t<файл преобразования>]
В качестве параметров могут использоваться следующие: Исходный файл - это любой текстовый файл в кодировке Win-1251. Утилита умеет обнаруживать комментарии в стиле Си (т.е. /* */ и //) и не обрабатывать вхождения строк внутри комментариев.
Выходной файл может отсутствовать, в этом случае имя выходного файла получается из имени входного путем добавления к его расширению "_c", т.е. из "main.c" получится "main.c_c". Выходной файл, если он существует, перезаписывается без дополнительных предупреждений. Файл преобразования (так же может отсутствовать) - это обычный текстовый файл, каждая строка которого задает способ преобразования символов в следущем формате: СИМВОЛ=ЗАМЕНА. СИМВОЛ - это исходный символ кириллицы в кодировке Win-1251, а ЗАМЕНА - это набор любых символов, которыми заменяется исходный Например, допустимы следующие строки в таблице преобразований:
А=A Разумеется, ЗАМЕНА не должна содержать недопустимых символов для языка Си (и русских букв, само собой).
Я думаю, что будет удобно вставить запуск этой утилиты для нужных файлов проекта в makefile, а компилировать уже те файлы, которые будут получены в итоге. В этом случае исходный текст в вашем редакторе будет содержать русские строки в привычной для вас кодировке Windows, а в скомпилированный файл попадут уже перекодированные строки. Таким образом обеспечивается удобство разработки и нужный результат.
Скачать утилиту, как обычно, можно из файлового архива. Добавить в любимые (0) | Просмотров: 28943
Только зарегистрированные пользователи могут оставлять коментарии. |
« Пред. | След. » |
---|