• <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
              回復  更多評論   

            久久国产精品成人片免费| 人妻无码αv中文字幕久久琪琪布 人妻无码精品久久亚瑟影视 | 午夜视频久久久久一区| 免费精品久久久久久中文字幕| 天天影视色香欲综合久久| 精品久久亚洲中文无码| 一本伊大人香蕉久久网手机| 狠狠色丁香久久婷婷综合| 中文精品久久久久国产网址 | 亚洲天堂久久精品| 久久久久亚洲国产| 97久久精品人人澡人人爽| 一本久久精品一区二区| 伊人热人久久中文字幕| 欧美亚洲国产精品久久久久| 久久国产高清字幕中文| 国产亚洲精久久久久久无码77777| 国产精品久久国产精品99盘 | 久久免费精品一区二区| 久久久久亚洲av无码专区喷水| 青青青青久久精品国产| 奇米影视7777久久精品| 亚洲精品乱码久久久久久按摩 | 久久久久亚洲精品中文字幕| 久久久久无码精品国产| 久久精品国产亚洲AV影院| 久久综合亚洲色HEZYO国产| 久久婷婷国产麻豆91天堂| 国产情侣久久久久aⅴ免费| 久久久久久国产精品无码超碰| 一本大道久久香蕉成人网| 精品久久久久一区二区三区| 久久se这里只有精品| 中文字幕亚洲综合久久2| 精品久久久久久久无码| 一本一本久久a久久综合精品蜜桃| 久久精品国产亚洲精品| 亚洲欧美精品一区久久中文字幕 | 久久99热只有频精品8| 麻豆一区二区99久久久久| 亚洲熟妇无码另类久久久|