亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

如何利用Xerces C++正確處理XML文檔中的中文

2019-11-17 05:33:32
字體:
來源:轉載
供稿:網友
下載本文示例代碼

1. 背景介紹

Apache的Xerces C++是廣大c/c++程序員非常喜歡使用的xml解析器之一。主要原因是其本身是一個開放源代碼的項目而且提供不同平臺下的庫和源代碼,故深受廣大c/c++程序員的歡迎。

Xerces C++可以到以下網站下載:
1) http://xml.apache.org/
2) http://www.vckbase.com/tools 2. 問題描述

根據軟件開發的要求,作者開發了一個文件特征識別軟件,該軟件可根據文件特有的特征識別出文件的類型。要求將文件特征保存在XML文件中。根據要求作者選擇了Xerces C++作為XML解析器。但發現出了一個嚴重的問題:被解析的XML文件中不能包含中文,否則中文將不能正確的解析。作者研究了Xerces C++提供的例子程序,發現這些例子程序解析的結果也是錯誤的。只有DOMPRint程序例外。這肯定了Xerces C++本身是支持中文的。
XML編碼:<pdf ext="pdf" description="pdf文檔"> <magic offset="0" type="string" value="/x25/x50/x44/x46" /> </pdf>SAXPrint程序解析結果:<pdf ext="pdf" description="pdf文档"> <magic offset="0" type="string" value="/x25/x50/x44/x46"></magic></pdf> 為此,作者曾經在IBM的中文網站發現一篇文章《如何利用Xerces-C++解析包含中文字符的XML文檔》并將其所描述的辦法應用到程序中。但后來由于機器發生故障,硬盤上的數據全部丟失。不得不把以前做過的事重做一遍。因一時在IBM的網站上未找到上面提到的貼子,而且由于當時撿現成的沒有專心研究其實現方法,故不得不仔細分析Xerces C++提供的源代碼,自己動手解決中文問題。為了今后廣大C++程序員碰到類似問題時不會像我一樣痛苦。我也決定將自己的研究結果公布出來供大家分享。假如誰有更好的解決辦法不要忘記告訴我。

3. 原因分析

上面的例子里,程序將“文檔”兩個中文字符解析成了亂碼。但DOMPrint程序確能夠正確解析。這表明Xerces C++對國際編碼肯定是支持的。作者通過對DOMPrint和SAXPrint兩個程序的比較跟蹤發現問題的根本就是XMLFormatter設置的問題。由于SAX是基于事件的,大多數使用者只是簡單的解析XML文檔,XMLFormatter的使用比較麻煩。而DOMPrint也是通過標準的輸出程序輸出的屏幕上的,我們不能直接使用輸出結果。
由于XML解析器解析的字符串都是XMLCh格式的,一個字符占用一個字節,而漢字字符確要占用兩個字節。故若不做適當的轉換,漢字的輸出結果就變成亂碼了。

4. 解決辦法

找到原因就有解決問題的方法了,明顯的需要一個把解析出來的XMLCh轉換成普通的字符串。這是解析,假如我們需要自己寫入XML文檔也有一個把普通字符串轉換為XMLCh的過程。我把這兩個轉換過程封裝在了一個名為“XMLStringTranslate”的類中。使用如下:
void SAXMagicHandlers::startElement(const XMLCh* const name,AttributeList& attributes){ XMLStringTranslate stringTranslate("gb2312"); string strName=stringTranslate.translate(name);//得到可包含漢字字符的普通字符串 string strValue="pdf文檔"; XMLCh * value= stringTranslate.translate(strValue.c_str());//將普通字符串轉換成XMLCh串}采用XMLStringTranslate后的實際運行結果:<pdf ext="pdf" description="pdf文檔"> <magic offset="0" type="string" value="/x25/x50/x44/x46"></magic></pdf> 非凡說明:
由于為了防止內存釋放問題,將普通字符串轉換成XMLCh *的translate函數返回的是類的一個成員變量,故下面的代碼是不答應的:XMLCh * value1= stringTranslate.translate("測試1");XMLCh * value2= stringTranslate.translate("測試2"); 這樣使用的結果是value1和value2的值將是一樣的(因為其內存地址根本就是一樣的)。正確的使用方法是通過內存拷貝或則其他方法,將value1的值保存起來或則及時使用,否則value2將影響value1的值。


5. 結束語

目前,許多企業已經或者正在采用Xerces C++開發XML的應用系統,相信在應用的過程中會碰到各種問題,歡迎有愛好的朋友與我聯系,共同交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品丝袜白浆摸在线| 久久精品国产久精国产思思| 国产精品v片在线观看不卡| 一区二区三区天堂av| 91天堂在线观看| 欧美中文在线观看国产| 亚洲一区二区自拍| 久久伊人色综合| 国产精品入口尤物| 久久久av电影| 亚洲美女中文字幕| 日韩中文字幕在线精品| 国产mv久久久| 日韩在线视频线视频免费网站| 日韩在线视频导航| 亚洲午夜精品视频| 国产精品视频1区| 久久亚洲春色中文字幕| 久久综合免费视频| 欧美精品九九久久| 欧美在线观看www| 久久精品国产一区二区三区| 欧美不卡视频一区发布| 亚洲第一中文字幕在线观看| 51色欧美片视频在线观看| 懂色aⅴ精品一区二区三区蜜月| 国产91在线播放精品91| 中文日韩在线观看| 日韩欧美视频一区二区三区| 中文字幕av一区二区三区谷原希美| 欧美大尺度电影在线观看| 国内成人精品一区| 中文字幕亚洲欧美| 成人免费观看a| 精品日韩美女的视频高清| 国产日韩欧美一二三区| 国产精品99久久久久久白浆小说| 久久久久久久久久久免费精品| 一本色道久久综合亚洲精品小说| 国产精品视频一区二区高潮| 国产精品久久久久久影视| 国产日韩精品视频| 亚洲香蕉在线观看| 国产精品h在线观看| 国产亚洲欧美视频| 91久久精品国产91久久性色| 国产日韩欧美电影在线观看| 欧美日韩中文字幕在线视频| 久热爱精品视频线路一| 国产精品91一区| 69久久夜色精品国产69乱青草| 伊人亚洲福利一区二区三区| 久久影视电视剧免费网站清宫辞电视| 91av在线不卡| 日本不卡免费高清视频| 欧美日韩亚洲高清| 国产精品亚洲美女av网站| 九九热99久久久国产盗摄| 亚洲成人激情在线观看| 欧洲亚洲妇女av| 欧美日韩亚洲网| 青草青草久热精品视频在线网站| 国产精品久久在线观看| 日韩在线精品视频| 日韩欧美国产网站| 不卡毛片在线看| 日韩精品免费在线观看| 亚洲精品电影网| 国产日韩欧美在线看| 国产午夜精品视频免费不卡69堂| 国产91免费看片| 久久久久999| 亚洲午夜久久久影院| 中文字幕一精品亚洲无线一区| 欧美丰满少妇xxxx| 成人性生交大片免费看视频直播| 一区二区三区 在线观看视| 黄色一区二区在线| 精品福利视频导航| 国产女同一区二区| 欧美精品成人91久久久久久久| 国产精品欧美风情| 国产在线播放不卡| 日韩激情av在线免费观看| 成人精品一区二区三区电影黑人| 亚洲色图在线观看| 欧美日韩中国免费专区在线看| 91精品国产综合久久久久久蜜臀| 亚洲最新av网址| 免费99精品国产自在在线| 91精品视频免费| 欧美刺激性大交免费视频| 超在线视频97| 亚洲永久在线观看| 狠狠爱在线视频一区| 国产精品一区二区av影院萌芽| 中文字幕欧美精品日韩中文字幕| 亚洲性夜色噜噜噜7777| 欧美疯狂xxxx大交乱88av| 欧美一区二区三区精品电影| 91九色单男在线观看| 国产精品444| 欧美成人中文字幕| 国产裸体写真av一区二区| 亚洲免费福利视频| 97在线观看免费高清| 欧美黑人国产人伦爽爽爽| 国产99久久精品一区二区永久免费| 亚洲精品国产综合久久| 亚洲一区二区三区xxx视频| 日韩大陆欧美高清视频区| 亚洲天堂2020| 亚洲国产欧美日韩精品| 久久成人一区二区| 欧美一级片在线播放| 亚洲成人激情在线| 超碰精品一区二区三区乱码| 国产成人精品av| 日韩一区二区三区xxxx| 国产在线播放91| 欧美性猛交xxxx免费看久久久| 亚洲精品成人久久| 亚洲精品成人免费| 精品香蕉在线观看视频一| 中文字幕日韩精品在线观看| 日韩在线小视频| 成人黄色大片在线免费观看| 啊v视频在线一区二区三区| 欧美一级淫片aaaaaaa视频| 91av在线精品| 日韩成人av网址| 国语自产精品视频在线看| 在线观看久久久久久| 91久久国产综合久久91精品网站| 国产亚洲激情视频在线| 日韩国产精品亚洲а∨天堂免| 成人午夜一级二级三级| 精品国产精品自拍| 国产精品吊钟奶在线| 欧美午夜性色大片在线观看| 久久久国产一区二区三区| 国内免费精品永久在线视频| 国产成人涩涩涩视频在线观看| 不卡av电影在线观看| 国产精品精品一区二区三区午夜版| 国产精品丝袜一区二区三区| 国产一区二区三区四区福利| 亚洲欧美999| 精品中文字幕在线2019| 日韩精品免费在线视频| 亚洲欧美日韩成人| 国产欧美va欧美va香蕉在| 国产精品三级美女白浆呻吟| 久久综合伊人77777| 亚洲精品suv精品一区二区| 韩国19禁主播vip福利视频| 久久综合伊人77777| 国产精品夫妻激情| 欧美另类极品videosbestfree| 精品视频www| 亚洲丁香久久久| 久久久噜久噜久久综合| 欧美激情一区二区三区久久久| 精品在线欧美视频|