avatar_yaesu-103

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

Автор yaesu-103, 22 января 2015, 15:39:00

« Freemore ISO Maker Burner | крякозябры в FxSound 2 »

yaesu-103Автор темы


Система Windows8 X64. Имеется EXE-шник. Программа для управления частотными приводами.
Программа - это интелектуальная разработка программиста или группы программистов, в которой реализованы определеные алгоритмы для выполнения каких-то конкретных задач. Наваять можно что угодно, в зависимости от уровня подготовки и опыта работы отдельно взятого программиста.

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

После установки программы в папке Bin есть две dll.  res044.dll и res049.dll
Вот эти dll-ки   (42176053) (42176054)


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



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



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



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

yaesu-103Автор темы

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

Показать / Скрыть текст
[свернуть]

Когда запускаю локализованную программу вижу вот это

Показать / Скрыть текст
[свернуть]

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

dinis124

22 января 2015, 15:38:33 #2 Последнее редактирование: 04 ноября 2014, 18:04:29 от dinis124
Будем играть в угадай что перевожу? Если объяснить подробнее не можете, почитайте, все есть к примеру и в этой ветке. На вскидку можете в редакторе сменить кодировку на UTF-8 и проверить файл запустив на исполнение. Если не получилось, на вкладке ресурсы посмотрите ANSI_CARSET смените на RUSSIAN_CARSET. Если не получается то нужно имя программы будет отгадать для начала.
Я говорю о редакторе Radialix в данном случае. В нем вот так: Войдите на сайт для перехода по ссылке

yaesu-103Автор темы

Извиняюсь по порядку.
Ситcема Windows8 X64. Имеется EXE-шник  Войдите на сайт для перехода по ссылке Программа для управления частотными приводами.
После установки программы в папке Bin есть две dll.  res044.dll и res049.dll
Вот эти dll-ки          Войдите на сайт для перехода по ссылке            Войдите на сайт для перехода по ссылке     (42176053) (42176054)
Проблему описал выше.

dinis124

yaesu-103
Ехе не качается. 10 минут жду.

Xotabush
Когда не распаковывается,  ставлю вчистую виртуалку, предварительно сделав снимок системы.

yaesu-103Автор темы

22 января 2015, 15:39:03 #5 Последнее редактирование: 04 ноября 2014, 21:17:09 от yaesu-103
ЦитироватьЕхе не качается. 10 минут жду.
Войдите на сайт для перехода по ссылке

Я на виртуалке под ХР пробовал. Тоже самое

yaesu-103Автор темы

dinis124

Показать / Скрыть текст
[свернуть]

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

Показать / Скрыть текст
[свернуть]

После HEX редактора в Radialix-е.

yaesu-103Автор темы

22 января 2015, 15:39:23 #7 Последнее редактирование: 06 ноября 2014, 07:05:37 от yaesu-103
dinis124,
Вот попробовал в HEX редакторе. Получается что меню программы в кодировке UTF-16 а диалоговые окна в ANSI такое возможно ???????

gazon01

ЦитироватьВот попробовал в HEX редакторе. Получается что меню программы в кодировке UTF-16 а диалоговые окна в UTF-8 такое возможно
надо Leserg"a подождать, это он знает, что за проблема у немецкого и русского шрифтов.
ну неможет быть меню строки с поддержкой кириллицы, а диалоги без.
Возможно всё! На невозможное просто требуется больше времени.
 Мудрец из Шангри Ла

Leserg

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

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

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


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

В этой программе для строк меню используется кодировка 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, т.е. в нашем понимании - кракозябрами. Например, строка "&Отмена" -> "&Îòìåíà". Применительно к редактору Radialix, это будет выглядеть следующим образом:



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



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

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



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



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

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

yaesu-103Автор темы

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

* Ваши права на сайте

    Light Portal

  • Вы можете просматривать элементы портала
  • Вы не можете управлять блоками
  • Вы не можете управлять своими страницами
  • Вы не можете размещать свои страницы без модерации

    Simple Machines

  • Вы не можете удалять темы.
  • Вы не можете создавать темы.
  • Вы не можете отвечать на сообщения.
  • Вы не можете прикреплять файлы.
  • Вы не можете изменять свои сообщения.
  • Вы не можете удалять свои сообщения.

Яндекс.Метрика Каталог@MAIL.RU - каталог ресурсов интернет