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

            Jiang's C++ Space

            創(chuàng)作,也是一種學習的過程。

               :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::

            TinyXML是個好東西,這個不用我多說了,我用它做過好幾個項目,但這幾個項目都只是從xml文件中獲取信息,沒有涉及到寫文件,最近需要生成xml的配置文件,才注意到這個問題,那就是TinyXML似乎不能保存文件為UTF-8格式。

            我用UltraEdit打開生成的xml文件,UltraEdit把它識別為ASCII格式的文本文件,而通過二進制查看,也確實如此,我看了下幫助文檔,也沒具體提及到這個問題。但后來我仔細整理了一下思路后,發(fā)覺這個其實不算什么問題,分析如下。

            文檔上就說明了,TinyXML是完全支持UTF-8的,可以嘗試load一個UTF-8格式的xml文件,完全沒有問題,那現(xiàn)在問題是load了一個UTF-8文件后,文件中的字符串,在TiXmlDocument對象中,到底是什么格式?TinyXML在load它之后會不會直接把UTF-8格式轉為Unicode格式?——不會,為什么?因為TinyXML在編寫的時候是把自己定位為一個比較單純的C++ Lib,它沒有使用任何Windows相關的API,包括很重要的兩個編碼轉換函數(shù)WideCharToMultiByte和MultiByteToWideChar,它都沒用,對不同平臺,編碼轉換函數(shù)可能是不同的,因此TinyXML不會畫蛇添足地提供這個轉換,也就是說,如果你的xml文件(UTF-8格式)中如果有中文的話,用TinyXML加載進來之后,依舊是UTF-8的,不經(jīng)過轉換直接print出來的話,就是亂碼了,所以要經(jīng)過一個UTF-8到Unicode的轉換,轉換代碼我這里就不寫了。再說一下,TinyXML聲稱對UTF-8的支持表示它認識UTF-8的xml文件,但并不表示它自動對UTF-8的文本進行轉換。

            好,再回到保存的問題上,其實你差不多想到了,應該怎么做,因為整個TinyXML其實并不計較內存中的文本究竟是什么內容,它都可以把文本當做是UTF-8(當然了,實際上把文本轉為UTF-8然后交給TinyXML的工作是我們的程序去完成),那我們可不可以說保存的xml文件其實就已經(jīng)是UTF-8格式的?——答案是肯定的。而UTF-8的格式標志其實就是文件頭的三個字節(jié):0xEF,0xBB,0xBF。有了這個頭,用UltraEdit打開這個xml,UltraEdit就把它認為是一個UTF-8的文本文件了。

            這個改動非常簡單,稍微瀏覽下TinyXML的代碼就知道怎么改了,我下載的TinyXML是2.6.1版本的(我沒記錯的話),在tinyxml.cpp文件中搜索“useMicrosoftBOM”,把“useMicrosoftBOM = false;”這個語句改為“useMicrosoftBOM = true;”就可以了,好像一共才三處地方,十分簡單,代碼一看就懂,不多說了。

            posted on 2010-07-05 15:31 Jiang Guogang 閱讀(6335) 評論(2)  編輯 收藏 引用 所屬分類: Windows Programming

            評論

            # re: 讓TinyXML保存文件為UTF-8格式 2010-07-05 16:05 Matthew
            你真是細心啊,像我就不會想那么多  回復  更多評論
              

            # re: 讓TinyXML保存文件為UTF-8格式 2010-07-06 09:09 mr.huang
            差距啊,國哥。。  回復  更多評論
              

            青青草原综合久久大伊人导航| 久久精品人人做人人爽电影| 色偷偷91久久综合噜噜噜噜| 中文字幕精品久久| 久久99精品国产自在现线小黄鸭 | 国产精品99久久久久久猫咪| 99久久国产亚洲综合精品| 久久99久久99小草精品免视看| 无码精品久久久天天影视| 精品久久久久久亚洲精品| 国产精品va久久久久久久| 99久久精品免费观看国产| 久久久久免费视频| 99国产欧美久久久精品蜜芽| 久久精品国产免费观看| 久久99国产综合精品女同| 中文精品久久久久人妻| 久久久久久综合一区中文字幕| 久久亚洲精品国产精品| 开心久久婷婷综合中文字幕| 久久精品国产亚洲精品2020| 丁香久久婷婷国产午夜视频| 久久国产精品久久久| 久久综合亚洲色一区二区三区| av午夜福利一片免费看久久| 欧美久久一级内射wwwwww.| 久久久九九有精品国产| 亚洲国产精品无码久久久久久曰 | 性做久久久久久久久老女人| 99精品国产在热久久无毒不卡| AV狠狠色丁香婷婷综合久久| 久久久青草久久久青草| 国产成人久久久精品二区三区| 亚洲国产成人精品无码久久久久久综合 | 久久99精品国产麻豆宅宅| 色综合久久88色综合天天| 一本伊大人香蕉久久网手机| 久久精品亚洲男人的天堂| 午夜久久久久久禁播电影| 99久久婷婷国产一区二区| 国内精品伊人久久久久av一坑|