잡다

Microsoft E-Book(chm files) 의 깨진 글자 보이게 하는 방법

디버그정 2008. 7. 29. 16:25

위 첨부파일은 chm 파일을  html 파일로 파싱하고  html파일을 수정한다.
수정 내용은 아랫부분에서 설명하고 있다.
디코더 성능이 좋아서인지 인덱싱 html 트리구조 생성한다. 물론 원본 chm의 트리구조와 같다.
뜯어보니 자바스크립트로 트리구조를 생성했다.
밑에서 말하는
html help workshop은 디컴파일은 잘되는데...다시 chm 파일로 만들려면
에러가 났다. 일일이 수동으로 설정해야 하는 듯 하다.
그래서 그냥 수정한 채로 html로 본다....ㅡㅡ;;;
html 로딩시마다 자바스크립트 activeX 관련 경고창 항상 뜨는데 이것을 없애려면
인터넷 익스플로러에서 도구 -> 인터넷 옵션 -> 고급탭에서
"내 컴퓨터에 있는 파일에서 액티브 컨텐트가 실행되는 것을 허용" 체크박스에 체크하면 된다.


// 아래는 웹서핑에서 발췌

Microsoft E-Book(chm files) 의 깨진 글자 보이게 하는 방법

1.  html help workshop 을 Microsoft 에서 받습니다.
     이것이 html <==> chm 변환해 주는 것인데, 이것을 이용해서 우선 chm 을 html 로 디컴파일 해 줍니다.

2.  htm 소스를 열어 보면, 소스 부분 글자가 깨어져 보입니다. (아래 2가지 방법 중 한가지 선택)

     해결방법1. 모든 htm 파일의 헤더 안에 명시적으로 charset 을 지정하는 부분을 추가해 주면 됩니다.
     <HEAD> 태그 내에 다음과 같이 추가 한다
     <META HTTP_EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">

     해결방법2. htm 파일내에 잘못된 케릭터 -96과 -110에 해당하는 문자를 아래와 같이 변경 합니다.
                      -96은 공백 문자 ' '로 변경,  -110 은 '`'(apostrophe) 문자로 변경
     예를 들면 해당 파일을 메모리에 올리고 아래와 같이 바꾼 후 파일을 새로 저장 합니다.
      if(buffer[i] == -96)
         buffer[i] = ' ';
      else if(buffer[i] == -110)
         buffer[i] = '`';

     * 해결방법1은 인터넷 에서 검색 해서 알아낸 방법인데 실제로 해결되지 않아서 2번의 방법으로 해결

3.  다시 html help workshop 로 새로운 프로젝트 만든 후, 맨 처음 디컴파일해서 생성된 hhc 파일을
     추가해 주고, Compiler 옵션에서 Search등의 세부 사항을 설정한 후 chm 파일로 컴파일 합니다.

꼬릿말 : htm의 파일의 갯수가 굉장히 많으므로 하나하나 모두 바꾸기는 힘이 든다. 따라서 프로그램으로 만들거나 unix의 bash 스크립트 등을 이용하여야 하는데 프로그램으로 할경우 _findfirst() 함수와 _findnext() 함수를 이용하면 편리 하다.  MSDN을 참고 ...