• <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自動生成的chm文件導(dǎo)航欄中文亂碼問題

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

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

            原因:
            doxygen 1.5.6版(不知道從哪個版本開始的)內(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會生成index.hhc之后直接自動調(diào)用hhc進(jìn)行編譯,中間并未留有供我進(jìn)行轉(zhuǎn)換的機(jī)會,而我又不想在doxygen運(yùn)行完畢生成了chm文件之后再重新修改index.hhc文件(自動或手動),然后再次重新生成chm文件,沒辦法,只有修改doxygen的源碼重新編譯了。


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

            編譯通過后,找到生成index.hhc文件的源代碼文件HtmlHelp.h/HtmlHelp.cpp,進(jìn)行修改。修改思路為:
            在保存index.hhc文件之前先進(jìn)行編碼轉(zhuǎn)換,直接轉(zhuǎn)換到GBK編碼在存儲,這樣就可以直接生成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 楊粼波 閱讀(1264) 評論(1)  編輯 收藏 引用

            評論

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

            解決doxygen 中文亂碼:
            Export

            Project: GB2312

            INPUT:INPUT_ENCODING GB2312
            //FILE_PATTERNS *.c

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


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


            人人狠狠综合久久亚洲88| 99久久国产综合精品网成人影院 | 久久成人小视频| 囯产极品美女高潮无套久久久| 久久精品桃花综合| 国内精品久久久久影院日本 | 亚洲伊人久久综合影院| 久久久久久国产精品美女| 熟妇人妻久久中文字幕| 91亚洲国产成人久久精品| 久久久国产99久久国产一| 久久99国产精一区二区三区| 久久国产高清一区二区三区| 国产69精品久久久久久人妻精品| 日本久久久久久中文字幕| 色妞色综合久久夜夜| 成人精品一区二区久久久| 天堂久久天堂AV色综合| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 狠狠色丁香婷婷综合久久来来去| 2021国内久久精品| 久久亚洲高清综合| 久久综合九色综合精品| 精品久久久一二三区| 狠狠综合久久综合中文88 | 久久久久国产| 国产精品伊人久久伊人电影| 久久亚洲私人国产精品vA| 久久精品国产99久久久古代| 欧洲性大片xxxxx久久久| 91精品国产色综久久| 久久国产一区二区| 免费观看成人久久网免费观看| 亚洲av成人无码久久精品| 久久只这里是精品66| 久久夜色撩人精品国产小说| 国产一区二区精品久久岳| 国产福利电影一区二区三区久久久久成人精品综合 | 色综合久久久久综合体桃花网| 久久久久高潮综合影院| 久久精品国产乱子伦|