Борьба с крякозябликами. Часть вторая

Еще один случай, который может возникнуть при переводе
  1. Оффлайн

    Автор темы

    Nexus

    Звание: Бывалый

    Администраторы

    Сообщений: 371

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

    Рейтинг: 6

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

    Еще один примерчик. Здесь уже пришлось вникать в работу шрифтов. Сильно не расписывал, там и так все вроде понятно. По сути: описывается другой подход к возникшей проблеме при переводе программы, которая обращается не к ветке реестра с кодовыми страницами, а к ветке описания шрифтов.

    Скачать руководство:


    Внимание! У вас нет прав для просмотра скрытого текста.
    19 мая 2013 - 00:40 / #1
  2. Оффлайн

    WYLEK

    Звание: Мастер

    Админ

    Сообщений: 1163

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

    Рейтинг: 10

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

    Забрал. Очень познавательно. Потому что пошли стадом biggrin программы, где придется это применять.

    19 мая 2013 - 15:57 / #2
  3. Оффлайн

    Dodakaedr

    Звание: Новичок

    Проверенные

    Сообщений: 20

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

    Рейтинг: 2

    Репа: 0

    Борьба с крякозябликами. Часть вторая



    Кто-то работал уже с программами от ZC? Имеется у них программа ZC Video Converter (Ссылка) с поддержкой русского языка, но он частично отображается крякозябликами. Изменения в реестре положительного результата не дали. Что можете посоветовать?
    Сообщение отредактировал WYLEK 29 июля 2018 - 18:09
    29 апреля 2016 - 19:07 / #3
  4. Оффлайн

    Leserg

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

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

    Сообщений: 581

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

    Рейтинг: 7

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

    Статья уже давно написана: Логический шрифт (Исправляем некорректное отображение кириллицы). Как раз ваш случай. biggrin

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

    30 апреля 2016 - 09:36 / #4
  5. Оффлайн

    Dodakaedr

    Звание: Новичок

    Проверенные

    Сообщений: 20

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

    Рейтинг: 2

    Репа: 0

    интересно, почему же на 7 не работает??

    Сообщение отредактировал WYLEK 29 июля 2018 - 18:03
    30 апреля 2016 - 20:28 / #5
  6. Оффлайн

    gazon01

    Звание: Мастер

    Администраторы

    Сообщений: 760

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

    Рейтинг: 8

    Репа: (26|25|-1)

    интересно, почему же на 7 не работает?


    я реестр ещё в 2009 правил, тогда никто в программах шрифт не исправлял, а все патчами пользовались, и вкладывали в архив с переводом разные "хитрые" файлики.
    посмотри .exe в редакторе, там три или четыре вида шрифтов, название одного из них я ещё нигде не встречал.
    на твоих скринах не те шрифты выделены

    "Возможно всё! На невозможное просто требуется больше времени."
    Мудрец из Шангри Ла

    1 мая 2016 - 07:09 / #6
  7. Оффлайн

    Leserg

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

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

    Сообщений: 581

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

    Рейтинг: 7

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

    интересно, почему же на 7 не работает?


    Потому что вы делаете подмену румынской кодировки, которая в ZC Video Converter и близко не пробегала. В статье "Борьба с крякозябликами. Часть вторая" разобран частный случай. Вы же почему-то решили, что он является универсальным, и насилуете реестр Windows. Впрочем дело ваше, продолжайте в том же духе. biggrin

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

    1 мая 2016 - 14:41 / #7
  8. Оффлайн

    Alecs962

    Звание: Новичок

    Знаток

    Сообщений: 50

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

    Рейтинг: 2

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

    Здравствуйте. Есть программа DiskCheckup (портатив) http://file.sampo.ru/dzg8nk/
    Вся локализация вынесена во внешние файлы localization.txt, SMARTDesc.csv и SysInfo_localization.txt. С файлами localization.txt и SysInfo_localization.txt проблем нет, а в SMARTDesc.csv находится всплывающая подсказка атрибутов SMART, проблема такова: видим первый атрибут - Raw Read Error Rate (Частота ошибок чтения), переводим строку в SysInfo_localization.txt и подсказка в виде синего значка исчезает.


    Нужно чтобы в SMARTDesc.csv в строке "1,Raw Read Error Rate,-1,Stores..." между 1 и 2-й запятой было один набор букв, что и в SysInfo_localization.txt, только тогда значок появится. С набором англицких букв это проходит, но при переводе в файле SMARTDesc.csv появляются кракозябры.



    Кодировка файлов разная - SMARTDesc.csv в UTF-8, а остальные в Юникоде. Есть ли решение этой проблемы?
    Сообщение отредактировал WYLEK 29 июля 2018 - 18:11
    9 февраля 2017 - 18:08 / #8
  9. Оффлайн

    Leserg

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

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

    Сообщений: 581

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

    Рейтинг: 7

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

    Цитата: Alecs962
    ... при переводе в файле SMARTDesc.csv появляются кракозябры... Кодировка файлов разная - SMARTDesc.csv в UTF-8, а остальные в Юникоде. Есть ли решение этой проблемы?


    Корень проблемы находится в исполняемом файле программы — DiskCheckup.exe. Считывание файла SMARTDesc.csv выполняется в кодировке ANSI. Затем строки преобразуются в кодировку Unicode по упрощенному алгоритму. Как известно, коды символов в диапазоне 00-7F (латиница) для таблиц ASCII и Unicode абсолютно одинаковые, поэтому в программе код символа в кодировке Unicode получается дополнением кода символа в кодировке ASCII нулевым байтом. Например, символ 'W' в наборе ASCII имеет код 0х57, а в наборе Unicode — 0х5700. В то время как, например, кириллический символ 'М' имеет код 0хСС, то по упрощенному алгоритму он превращается в символ Unicode вида 0хСС00. Но на самом деле код русской буквы 'М' в кодировке Unicode должен быть 0х1С04.

    Таким образом, чтобы избавиться от "кракозябр", необходимо модифицировать алгоритм перекодировки. Что мы сделаем: добавляем проверку вхождения кода символа в диапазон 7F-FF. Если это условие выполняется, то по упрощенному алгоритму конвертируем код символа в кодировку Unicode для диапазона кириллицы.

    Данные патча для файла DiskCheckup.exe v3.4.1003.0 (в отладчике x64Dbg):


    Далее, кодировку файла SMARTDesc.csv необходимо изменить на ANSI (Windows-1251), обязательно. Также, при переводе содержимого файла, все строки с подсказками нужно заключить в двойные кавычки ( " ). Если внутри строки какое-либо выражение должно быть указано в кавычках, то вместо двойных кавычек используйте одинарные ( ' ) или удвоенные одинарные ( '' ). Но ни в коем случае не используйте альтернативные варианты кавычек, типа « » или “ ”. Эти символы находятся во второй половине таблицы ASCII и при конвертации (по упрощенной схеме) в Unicode, для диапазона кириллицы, превращаются в "мусор".

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

    Борьба с крякозябликами. Часть вторая
    Сообщение отредактировал WYLEK 29 июля 2018 - 18:15

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

    12 февраля 2017 - 14:35 / #9
  10. Оффлайн

    Alecs962

    Звание: Новичок

    Знаток

    Сообщений: 50

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

    Рейтинг: 2

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

    Цитата: Leserg (12.02.2017, 15:35)
    Корень проблемы находится в исполняемом файле программы.....

    Огромное СПАСИБО Вам! Честно говоря именно Ваш ответ я ждал, в заковыристых ситуациях, продолжением которых идет ковыряние в коде программы только Ваша подсказка помогает решить проблему.
    12 февраля 2017 - 16:13 / #10

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

---
Создано тем
861
Всего сообщений
7519
Пользователей
14561
Новый участник
Виктор Павлов