Программа для ЧПУ

проблема с кириллицей (крякозябры)
  1. Оффлайн

    Автор темы

    yaesu-103

    Звание: Прибывший

    Участники

    Сообщений: 4

    Создано тем: 1

    Рейтинг: 1

    Репа: 0

    Ситcема Windows8 X64. Имеется EXE-шник   ftp://ftp.lenze.de/AKB/GDC_V414.zip. Программа для управления частотными приводами.
    После установки программы в папке Bin есть две dll.  res044.dll и res049.dll
    Вот эти dll-ки          http://rusfolder.net/files/42176053            http://rusfolder.net/files/42176054.     (42176053) (42176054)


    Подскажите что делаю не так. В любом редакторе ресурсов я вижу вот это



    Так выглядят диалоговые окна. А меню программы отображается на русском.



    Это после HEX редактора



    После HEX редактора в Radialix-е. Вот попробовал в HEX редакторе. Получается что меню программы в кодировке UTF-16 а диалоговые окна в ANSI такое возможно ???????

    22 января 2015 - 14:39 / #1
  2. Оффлайн

    Leserg

    Звание: Эксперт

    Команда сайта.

    Сообщений: 581

    Создано тем: 72

    Рейтинг: 7

    Репа: (110|110|0)

    Цитата: yaesu-103;13854
    Получается что меню программы в кодировке UTF-16 а диалоговые окна в ANSI такое возможно ?


    Конечно, а почему бы и нет? ::002::

    Цитата: gazon01;13856
    ну неможет быть меню строки с поддержкой кириллицы, а диалоги без.


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

    В этой программе для строк меню используется кодировка Unicode, а для строк диалоговых окон - ANSI. Так как исходная строка имеет кодировку Unicode, то выполняется конвертация из Unicode в ANSI. Для символов латинского алфавита преобразование можно сделать элементарно: у каждого символа просто удаляется второй байт, который является нулевым. Например, возьмем строку "&Drive". В кодировке Unicode, в НЕХ-коде, она выглядит так:

    260044007200690076006500

    Здесь на каждый символ отводится два байта, т.е. к примеру символ D - 4400, и у символов латинского алфавита второй байт всегда нулевой. Чтобы преобразовать строку в ANSI нужно просто удалить нулевые байты и получим НЕХ-код вида

    264472697665

    Это будет та же строка "&Drive", но уже в кодировке ANSI. Это самый простой и быстрый способ преобразования строки из одной кодировки в другую. Причем, для строк латинского алфавита он прекрасно работает как в одну сторону, так и в другю (Unicode <-> ANSI). Посмотрите на код строки в утилите "1251 to НЕХ", он одинаковый во всех кодировках:

    Программа для ЧПУ

    А вот с другими языками, символы которых отличаются от латиницы, такой финт не пройдет. Переведем строку на русский - "&Привод". В кодировке Unicode, в НЕХ-коде, она выглядит так:

    26001F044004380432043E043404

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

    261F4038323E34

    Но если вы посмотрите на код этой строки для кодировки ANSI, то увидите там совершенно другую картину

    26CFF0E8E2EEE4



    Как видите, 261F4038323E34 (& @82>4) это совсем не 26CFF0E8E2EEE4 (&Привод). Вот и получается в программе вместо нормальных строк ерунда.

    Я не знаю, какой алгоритм преобразования строк использовал программист, и показал вам один из возможных вариантов. Почему он (программист) поступил таким образом, мы никогда не узнаем. Но разрешить подобную ситуацию в данном случае можно.

    Для диалоговых окон перевод строки необходимо записывать символами кодовой страницы windows-1252, т.е. в нашем понимании - кракозябрами. Например, строка "&Отмена" -> "&Ioiaia". Применительно к редактору Radialix, это будет выглядеть следующим образом:



    Тогда в работающем приложении будет все корректно



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

    Скопировали из Radialix'a строки в текстовый редактор (кодировка windows-1251)



    Потом переключили кодировку на windows-1252



    Получили кракозябры. Теперь переносим строки обратно в Radialix. Все.

    Другой вариант более сложный. Нужно найти в программе код, где выполняется преобразование строк и сделать в нем соответствующие изменения, если это возможно. К сожалению, в этом варианте я вам пока ничем не могу помочь.
    Сообщение отредактировал WYLEK 29 июля 2018 - 18:29

    Кто ищет, тот всегда найдет!

    22 января 2015 - 14:41 / #2
  3. Оффлайн

    Автор темы

    yaesu-103

    Звание: Прибывший

    Участники

    Сообщений: 4

    Создано тем: 1

    Рейтинг: 1

    Репа: 0

    Вот спасибо большое, всё разложил по полочкам.
    А то я уже не один месяц бьюсь с этой прогой. Я начинающий в этом деле.  Только вчера пришёл к выводу что кодировки разные. (первый раз с таким столкнулся)
    Я попробовал в HEX редакторе править а потом напрямую открыть не в Radialixe (там были кракозябры) а в самой проге.
    22 января 2015 - 14:46 / #3

Статистика форума, пользователей онлайн: 2 (за последние 20 минут)

Создано тем
865
Всего сообщений
7602
Пользователей
14659
Новый участник
SerGe_95