Кодировкав NTVDM. Мои нервы не выдерживают.

Тема в разделе "WASM.RESEARCH", создана пользователем W4FhLF, 18 апр 2008.

  1. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    Приветствую всех.

    Ситуация простая до не могу. Есть программа, она написана на VB3 в году эдак 94. Запускается под NTVDM, её надо перевести на русский(не спрашивайте зачем:) ). В WinHex вижу все строки, которые мне необходимо перевести. Там ресурсы находятся в таких вот контейнерах:

    Код (Text):
    1. Offset      0  1  2  3  4  5  6  7   8  9 10 11 12 13 14 15
    2.  
    3. 00134752   3E 00 00 00 08 00 01 FF  00 15 C2 E2 E5 E4 E8 F2   >......я..Insert
    4. 00134768   E5 74 65 61 6D 20 6E 69  63 6B 6E 61 6D 65 3A 03    team nickname:.
    5. 00134784   C0 C0 C0 00 05 68 01 58  02 07 08 77 01 0C 05 41   ААА..h.X...w...A
    6. 00134800   72 69 61 6C 00 00 04 41  D1 12 06 00 FF 00 03 3C   rial...AС...я..<
    7. 00134816   00 00 00 09 00 01 FF 00  13 53 65 6C 65 63 74 20   ......я..Select
    8. 00134832   74 65 61 6D 20 6E 75 6D  62 65 72 3A 03 C0 C0 C0   team number:.ААА
    9. 00134848   00 05 68 01 F0 00 07 08  77 01 0C 05 41 72 69 61   ..h.р...w...Aria
    10. 00134864   6C 00 00 04 41 D1 12 05  00 FF 00 03 3E            l...AС...я..>
    Я просто перебиваю всё на русский(длину ессно не превышаю). Соханяю и у меня всё отображается хорошо. Но так же хорошо отображается не у всех. По непонятным причинам у других людей, запускающих эту программу под такой же русской ОС, как и я(XP SP2), отображаются каракули.

    Я перепробовал кучу вариантов, почему и как... облазил массу настроек, но так и не смог установить причину. Почему у одних Label с шрифтом Arial показывает кириллицу нормально, а у других, на той же ОС, в виде абра-кадабры?

    Есть идеи? Куда рыть?

    С ув.
     
  2. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    кажется, решение этой проблемы стало классическим: изменение кодовой страницы в реестре на 1251.
     
  3. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    OMG, как же всё просто оказалось :) Я ведь смотрел RegMon'om, но использовал фильтр для "fon;ttf", про кодовые страницы мысль не пришла. RamMerLabs, спасибо большое.
     
  4. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    нзч. если не найдешь где менять - я завтра после обеда буду дома, расскажу.
     
  5. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    Я уже нашёл, поменял, всё работает.
     
  6. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Ну и каков же ответ для истории?
     
  7. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    Как заставить нелокализованные программы показывать русские буквы.

    Для воспроизведения русских букв в нелокализованных программах необходимо, чтобы последняя работала с кодовой таблицей 1251. Ярким примером нелокализованной программы является Adobe Photoshop, в котором принципиально ничего не напишешь по-русски даже заведомо русскими шрифтами. Для того чтобы обмануть программу, в реестре изменяется соответствие между кодовой страницей программы и используемым при отображении символов файлом кодовой таблицы. Изначально они соответствуют друг другу: 1250="с_1250.nls", 1251="с_1251.nls", 1252="с_1252.nls" и т.д. Большинство нелокализованных программ использует в качестве кодовой страницы альтернативного языка страницу 1250. При этом вместо русских букв выводятся символы европейских языков с надстрочными знаками, что не может радовать. Однако, можно обмануть программу и подставить в ее родную кодовую страницу 1250 таблицу от кодировки 1251 (кириллица). В итоге записи в реестре будут выглядеть так: 1250="c_1251.nls", 1251="c_1251.nls", 1252="c_1252.nls"... После этого нелокализованные программы будут нормально воспроизводить русские буквы. Есть и более "продвинутые" программы, использующие кодовую страницу 1252. В этом случае корректируется строка 1252="c_1251.nls"... Во избежание недоразумений рекомендуется сразу внести изменения в обе строки - 1250 и 1252. Если вам попалась более хитрая программа, то можно попытаться изменить другие таблицы, расположенные по тому же адресу.

    Раздел: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
    Переменная: 1250, 1252... и т.д. (строковый)
    Значение: имя файла с кодировкой

    (С) http://saanvi.ru/fac.php?filename=ntregistry.txt
     
  8. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    W4FhLF
    И этому методу уж 100 лет. В смысле, что для 95-го и 98-го это единственный способ был. В NT использовался по инерции. Вроде все серьезные проги уже давно переделаны. NTVDM - другое дело. Она обязана ДОС симулировать.
    А в ДОС наша страна использовала кодовую страницу 866 :-( Сколько же нервов это стоило при переходе в Винды... А еще есть шрифты(фонты) с суффиксом Cyr и миллионы документов его использующие. Блин - наворотили.