Программа для ЧПУ
Будем играть в угадай что перевожу? Если объяснить подробнее не можете, почитайте, все есть к
-
Оффлайн
Звание: Ветеран
Команда сайта
Сообщений: 945
Создано тем: 79
Рейтинг: 8
Репа: (131|131|0)
Баллы: 1676
Был: 2024-07-28 22:59
Лайков: 167
Цитата: 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. Все.
Другой вариант более сложный. Нужно найти в программе код, где выполняется преобразование строк и сделать в нем соответствующие изменения, если это возможно. К сожалению, в этом варианте я вам пока ничем не могу помочь.22 января 2015 - 15:41 / #11
Статистика форума, пользователей онлайн: 3 (за последние 20 минут)
- Создано тем
- 1197
- Всего сообщений
- 15762
- Пользователей
- 18014
- Новый участник
- Markhabayev