• Добро пожаловать на WYLEK.ru. Пожалуйста, войдите или зарегистрируйтесь.
 
165 гостей, 1 пользователь

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

Автор Nexus, 19 мая 2013, 01:40:54

« предыдущая - следующая »

NexusАвтор темы

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

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


Извините, вам запрещён просмотр содержимого спойлеров.

WYLEK

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

Dodakaedr

Ответ #2 : 29 апреля 2016, 19:07:54 #2 Последнее редактирование: 29 июля 2018, 18:09:26 от WYLEK


Кто-то работал уже с программами от ZC? Имеется у них программа ZC Video Converter (Ссылка) с поддержкой русского языка, но он частично отображается крякозябликами. Изменения в реестре положительного результата не дали. Что можете посоветовать?

Leserg

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

Dodakaedr

Ответ #4 : 30 апреля 2016, 20:28:54 #4 Последнее редактирование: 29 июля 2018, 18:03:58 от WYLEK
интересно, почему же на 7 не работает??

Извините, вам запрещён просмотр содержимого спойлеров.

gazon01

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

я реестр ещё в 2009 правил, тогда никто в программах шрифт не исправлял, а все патчами пользовались, и вкладывали в архив с переводом разные "хитрые" файлики.
посмотри .exe в редакторе, там три или четыре вида шрифтов, название одного из них я ещё нигде не встречал.
на твоих скринах не те шрифты выделены
"Возможно всё! На невозможное просто требуется больше времени."
 Мудрец из Шангри Ла

Leserg

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

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

Alecs962

Ответ #7 : 09 февраля 2017, 19:08:54 #7 Последнее редактирование: 29 июля 2018, 18:11:02 от WYLEK
Здравствуйте. Есть программа 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, а остальные в Юникоде. Есть ли решение этой проблемы?

Leserg

Ответ #8 : 12 февраля 2017, 15:35:54 #8 Последнее редактирование: 29 июля 2018, 18:15:41 от WYLEK
Цитата: 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, для диапазона кириллицы, превращаются в "мусор".

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

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

Alecs962

Цитата: LesergКорень проблемы находится в исполняемом файле программы.....
Огромное СПАСИБО Вам! Честно говоря именно Ваш ответ я ждал, в заковыристых ситуациях,  продолжением которых идет ковыряние в коде программы только Ваша подсказка помогает решить проблему.

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