• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            徹底解決使用Doxygen 1.5.6自動生成的chm文件導航欄中文亂碼問題

            轉載自:http://dev.firnow.com/course/3_program/c++/cppjs/20100630/290869.html

            最近升級了一下doxygen到最新版1.5.6,結果發現生成的chm文件導航欄中文會出現亂碼,折騰了一天,終于查明原因并解決,特此分享給大家。

            原因:
            doxygen 1.5.6版(不知道從哪個版本開始的)內部一律使用UTF-8編碼,生成的index.hhc文件也是使用UTF-8編碼,然而微軟的hhc編譯工具不支持UTF-8編碼,結果導致編譯出的chm文件正文部分中文一切正常,但導航欄全是亂碼。從網上搜了一圈,好像大家基本都遇到了這一情況,解決辦法各異。

            解決辦法:
            解決辦法的核心就是將index.hhc文件用編碼轉換工具(例如iconv,ultraedit等)轉換成GBK,再用hhc編譯即可。

            由于doxygen會生成index.hhc之后直接自動調用hhc進行編譯,中間并未留有供我進行轉換的機會,而我又不想在doxygen運行完畢生成了chm文件之后再重新修改index.hhc文件(自動或手動),然后再次重新生成chm文件,沒辦法,只有修改doxygen的源碼重新編譯了。


            修改過程:
            首先下載源碼并編譯doxygen,注意一定要先閱讀編譯指南,我就是沒看編譯指南導致走了不少彎路,因為doxygen編譯過程中要用到UnxUtil工具,需要下載并裝好。

            編譯通過后,找到生成index.hhc文件的源代碼文件HtmlHelp.h/HtmlHelp.cpp,進行修改。修改思路為:
            在保存index.hhc文件之前先進行編碼轉換,直接轉換到GBK編碼在存儲,這樣就可以直接生成GBK編碼的index.hhc文件,后續過程就水到渠成了。

            相關代碼:
            HtmlHelp.h
            class HtmlHelp  : public IndexIntf
            {
              
              
            private:
              
                QFile 
            *cf,*kf; 
                QBuffer 
            *cb;        // Added by zwjia
                QTextStream cts,kts;
              
            }
            ;


            HtmlHelp.cpp
            void HtmlHelp::initialize()
            {
              
            const char *str = Config_getString("CHM_INDEX_ENCODING");
              
            if(!str) str = "Windows-1250";
              m_fromUtf8 
            = portable_iconv_open(str,"UTF-8"); 
              
            /* open the contents file&nb
            sp;
            */

              QCString fName 
            = Config_getString("HTML_OUTPUT"+ "/index.hhc";
              cf 
            = new QFile(fName);
              
            if (!cf->open(IO_WriteOnly))
              
            {
                err(
            "Could not open file %s for writing\n",fName.data());
                exit(
            1);
              }

              cb 
            = new QBuffer();       // Added by zwjia
              cb->open(IO_WriteOnly);   // Added by zwjia
              /* Write the header of the contents file */
              cts.setDevice(cb);
              cts.setEncoding(QTextStream::Latin1);
              
            }


            void HtmlHelp::finalize()
            {
              
            // end the contents file
              cts << "</UL>\n";
              cts 
            << "</BODY>\n";
              cts 
            << "</HTML>\n";
              cts.unsetDevice();
              
            ////////////////////////////////////////
            ////////

              // Modified by zwjia
              QByteArray buf = cb->buffer();
              
            void* handle = portable_iconv_open("GBK","UTF-8");
              size_t inputsize 
            = buf.size();
              size_t outputsize 
            = inputsize*4+1;
              
            char* in = buf.data();
              QByteArray outbuf;
              outbuf.resize(outputsize);
              
            char* out = outbuf.data();
              size_t len 
            = portable_iconv(handle,(const char **)&in,&inputsize, &out&outputsize );
              outbuf.resize(
            out-outbuf.data());
              cf
            ->writeBlock(outbuf);
              cf
            ->close();
              delete cf;
              delete cb;
              portable_iconv_close(handle);
              
            // Modified by zwjia --end
              //////////////////////////////////////////////////////////////
              
            }

            重新編譯后,大功告成!
            本想順便把編譯后的exe作為附件貼在這里供大家直接使用,卻沒找到貼附件的地方...

            posted on 2010-11-06 20:51 楊粼波 閱讀(1264) 評論(1)  編輯 收藏 引用

            評論

            # re: 徹底解決使用Doxygen 1.5.6自動生成的chm文件導航欄中文亂碼問題 2011-08-08 11:12 hi

            解決doxygen 中文亂碼:
            Export

            Project: GB2312

            INPUT:INPUT_ENCODING GB2312
            //FILE_PATTERNS *.c

            TEST ok
              回復  更多評論   

            久久强奷乱码老熟女| 亚洲精品无码久久毛片| 久久精品国产WWW456C0M| 久久久久久久尹人综合网亚洲| 亚洲精品WWW久久久久久| 精品99久久aaa一级毛片| 久久一本综合| 久久AV高潮AV无码AV| 久久国产精品99国产精| 91性高湖久久久久| 久久人人爽人人爽人人片av麻烦| 国产精品无码久久综合| 久久久久亚洲AV成人网人人网站| 国产亚洲精品久久久久秋霞| 色综合久久中文综合网| 久久久久青草线蕉综合超碰 | 亚洲精品美女久久久久99| 69SEX久久精品国产麻豆| 亚洲v国产v天堂a无码久久| 久久精品无码专区免费青青| 欧美大战日韩91综合一区婷婷久久青草 | 国内精品久久久久久久亚洲| 亚洲中文精品久久久久久不卡| 国产精品久久久久乳精品爆 | 97久久久久人妻精品专区| 日韩AV毛片精品久久久| 久久久精品午夜免费不卡| 国产69精品久久久久久人妻精品| 久久精品一区二区影院| 国产成人久久AV免费| 国产精品久久久亚洲| 亚洲乱码精品久久久久..| 久久久无码精品亚洲日韩蜜臀浪潮 | 中文字幕一区二区三区久久网站 | 久久久国产视频| 久久精品中文字幕一区| 国产精品伦理久久久久久| 久久中文娱乐网| 久久久久亚洲AV成人网| 国产99久久久久久免费看| 久久国产福利免费|