• <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>

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            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自動(dòng)生成的chm文件導(dǎo)航欄中文亂碼問題

            轉(zhuǎn)載自:http://dev.firnow.com/course/3_program/c++/cppjs/20100630/290869.html

            最近升級(jí)了一下doxygen到最新版1.5.6,結(jié)果發(fā)現(xiàn)生成的chm文件導(dǎo)航欄中文會(huì)出現(xiàn)亂碼,折騰了一天,終于查明原因并解決,特此分享給大家。

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

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

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


            修改過程:
            首先下載源碼并編譯doxygen,注意一定要先閱讀編譯指南,我就是沒看編譯指南導(dǎo)致走了不少?gòu)澛罚驗(yàn)閐oxygen編譯過程中要用到UnxUtil工具,需要下載并裝好。

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

            相關(guān)代碼:
            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 楊粼波 閱讀(1260) 評(píng)論(1)  編輯 收藏 引用

            評(píng)論

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

            解決doxygen 中文亂碼:
            Export

            Project: GB2312

            INPUT:INPUT_ENCODING GB2312
            //FILE_PATTERNS *.c

            TEST ok
              回復(fù)  更多評(píng)論   


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            99久久国产热无码精品免费| 国产精品久久久久影视不卡| 久久精品黄AA片一区二区三区| 精品久久久久久无码免费| 久久久久se色偷偷亚洲精品av| 久久精品一区二区国产| 三级三级久久三级久久| 国产高潮国产高潮久久久91| 久久99久久99精品免视看动漫| 亚洲国产成人久久综合野外| 久久久精品午夜免费不卡| 69国产成人综合久久精品| 亚洲综合伊人久久大杳蕉| 久久综合给合综合久久| 国产福利电影一区二区三区久久老子无码午夜伦不| 久久久久久国产精品美女| 久久久人妻精品无码一区| 一本色道久久88加勒比—综合| 久久精品国产亚洲av影院| 一本色综合网久久| 色妞色综合久久夜夜| 色青青草原桃花久久综合| 久久久久亚洲?V成人无码| 国产一区二区精品久久岳| 狠狠色丁香久久婷婷综| 国产精品久久午夜夜伦鲁鲁| 久久精品国产亚洲AV无码麻豆 | 久久综合狠狠综合久久| 久久久久久久久久久久久久| 久久久高清免费视频| 国内精品久久久久影院老司| 伊人久久五月天| 久久精品中文无码资源站| 久久人人爽人人人人片av| 精品伊人久久久| 国产亚洲精品久久久久秋霞| 亚洲国产精品18久久久久久| 麻豆一区二区99久久久久| 嫩草伊人久久精品少妇AV| www.久久热.com| 国内精品久久久久久麻豆 |