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

Будем играть в угадай что перевожу? Если объяснить подробнее не можете, почитайте, все есть к
  1. Оффлайн

    Leserg

    Звание: Ветеран

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

    Сообщений: 929

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

    Рейтинг: 8

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

    Баллы: 1596

    Был: 2024-04-28 00:36

    Лайков: 140

    Цитата: 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. Все.

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

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

    22 января 2015 - 15:41 / #11

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

Создано тем
1177
Всего сообщений
15352
Пользователей
17855
Новый участник
granIT