建体彩网|中彩网双色球连号|
?
快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

新蒲京澳門賭場網站:利用Xerces C++正確處理XML文檔中的中文

?

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編碼:

SAXPrint法度榜樣解析結果:

為此,作者曾經在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后的實際運行結果:

分外闡明:

因為為了防止內存開釋問題,將通俗字符串轉換成XMLCh *的translate函數返回的是類的一個成員變量,故下面的代碼是不容許的:

XMLCh * value1= stringTranslate.translate("測試1");

XMLCh * value2= stringTranslate.translate("測試2");

這樣應用的結果是value1和value2的值將是一樣的(由于其內存地址根本便是一樣的)。精確的應用措施是經由過程內存拷貝或則其他措施,將value1的值保存起來或則及時應用,否則value2將影響value1的值。

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

建体彩网
快乐十分开奖结查询山西 陕西快乐10分 黑金棋牌可以提现吗 排列3和值走势图 16年凤凰平台官网注册 青海快三开奖结果查询 山东十一选五专家预测 11选5走势图安徽时时彩网站 加拿大美式足球直播 136期单双中特46中41