• <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 楊粼波 閱讀(1260) 評論(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
              回復  更多評論   

            久久美女人爽女人爽| 东方aⅴ免费观看久久av| 狠狠干狠狠久久| 国产精品免费看久久久香蕉| 久久综合色老色| 99国产欧美精品久久久蜜芽| 无码精品久久一区二区三区| 久久久无码人妻精品无码| 久久免费视频一区| 99久久中文字幕| 色欲综合久久中文字幕网| 久久精品国产亚洲5555| 日韩精品无码久久久久久| 久久国产精品免费一区二区三区| 日韩精品无码久久久久久| 色妞色综合久久夜夜| 久久久久国产一区二区| 久久国产精品-国产精品| 99久久国产亚洲综合精品| 久久久久女教师免费一区| 久久精品国产精品青草| 久久久无码精品亚洲日韩蜜臀浪潮| 日日狠狠久久偷偷色综合免费| 国产精品免费久久| 国产亚洲欧美成人久久片| 久久国产精品99精品国产| 亚洲精品tv久久久久久久久| 久久久久亚洲av成人网人人软件| 欧美与黑人午夜性猛交久久久| 国产成人无码精品久久久久免费| 久久精品成人国产午夜| 久久99国产精品一区二区| 久久精品国产亚洲AV高清热| 欧洲人妻丰满av无码久久不卡| 亚洲人成伊人成综合网久久久| 久久久久久国产精品美女| 99蜜桃臀久久久欧美精品网站| 久久亚洲精品国产亚洲老地址| 精品久久久无码人妻中文字幕| 国产成人无码精品久久久性色| 人妻久久久一区二区三区|