Проблемы с открытием файлов *.chm

    Так уж получилось, что я люблю читать книги в электронном формате. И достаточно много книг у меня в формате Compiled HTML Help. Довольно давно столкнулся с проблемой, когда необходимые мне файлы *.chm отказывались открываться. Они то открываются, но не отображают содержимое, хотя меню работает
    Проблема №1
    то не открываются вовсе
    Проблема №2

    Сначала я предположил, что файлы могут быть битыми, ведь все скачивались с интернета. Но распаковка файлов из CHM проходила успешно, а следовательно ошибку нужно было искать в другом месте.
    Не долго думая, я попробовал дать неоткрывающемуся файлу более простое имя, как то C:\1.chm, и оказалось, что это решает проблему — файлы открываются. Т.е. я попал в точку, проблема в имени файла. Но какая?
    После изучения имён всех проблемных файлов выяснилось, что это почти все книги по C Sharp, а если быть более точным, то по C#, т.к. проблему создаёт именно решётка в имени файла… А что такого в этом символе? Я чуть было не лишился пары десятков книг! =)

    Но решётка — не единственный источник проблем. С символом решётки в своём имени файлы открываются, но не работают, а вот если встречается последовательность символов ".col", то выдается сообщение, что файл открыть не удаётся.

    И кто его знает, что там намудрили разработчики в Microsoft, ибо сторонняя читалка xCHM всё без проблем открывает, и я бы рекомендовал на нее перейти, но есть у нее один большой минус — она не понимает кириллицы в менюшках.

    Т.о. если полный путь к файлу в формате .chm содержит символ "#" или последовательность символов ".col", не спешите этот файл удалять, просто переименуйте ;)
    Надеюсь, эта информация будет кому-нибудь полезной.

    P.S.: проблемы были под Windows XP SP3.
    P.P.S.: если Вы знаете о других проблемах, связанных с открытием CHM-файлов, отпишитесь пожалуйста в комментах.
    Поделиться публикацией
    Комментарии 13
      +1
      ИМХО, проблема связана с тем, что символ # используется в URL для отделения метки (ancor) на странице от имени самой страницы. Вот CHM-движок и глючит.
        0
        Я понимаю, для чего решётка в URL, но почему она не может быть частью имени файла (не вообще, а только chm)? Разработчики движка HTML Help могли бы предусмотреть такую проблему… Разработчики упоминавшейся в статье xCHM предусмотрели же. А так оставалось только догадываться, почему не работало.
        Ну пусть бы движок искал решетку после расширения chm (если из какой-нибудь программы вызывалась справка в определенное место страницы), работало бы, думаю.
          –1
          Последовательность «%23» должна подменять собою символ «#» в URLах, чтобы он не воспринимался как отделитель якоря (ancor).

          Очевидно, майкрософтовские разработчики либо позабыли кодировать символ этим способом, либо лишний раз декодировали его при обработке.
            0
            Про % в имени файла я вообще молчу, он к добру не приводит =)
            Я про него забыл, поэтому о нём нет в статье, спасибо.
        0
        HH юзается довольно-таки часто, но даже в Windows Server 2008 (не знаю как в семерке) версия за 2002 год. Изменений по сравнению с версией, которая в XP я не заметил. Могли бы уже довести его до ума, чтоб юникод в именах разделов и в индексе поддерживался, чтоб спецсимволы не мешали, ни так-далее.
          0
          нативный enu windows, т.е. без каких-либо ru mui/gui/etc например не способен открыть [а-яА-Я0-9].chm
          решается переименованием в [a-zA-Z0-9].chm
              0
              Обидно, я искал видать не так как-то. И тоже с C# пример =)
              Одно радует, про ".col" там ни слова :) хотя где-то должно быть и про него, думаю.
              0
              если Вы знаете о других проблемах, связанных с открытием CHM-файлов, отпишитесь пожалуйста в комментах.


              Очень часто, помню, CHM-файлы не открывались с сетевых дисков. Просто белая страница без содержания. Копирование на локальный диск решало проблему. Многие, уверен, с этим сталкивались.
                +1
                Проблема с открытием CHM по сети решается небольшой правкой реестра.
                В ключе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions (создать при необходимости) нужно создать параметр MaxAllowedZone типа DWORD и присвоить ему значение 1
                –3
                Microsoft же!
                  0
                  Была проблема, тоже связанная с путём к файлу. Было под Win XP(SP1 и SP2).
                    0
                    Проблема с символом # также актуальна для IE с файлами в формате MHT.
                    Если попробовать открыть такой файл, содержащий в названии данный символ (файловая система позволяет), то IE выдаст ошибку.
                    Причем для TXT и HTML отображение происходит нормально.

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                    Самое читаемое