2013-03-04 37 views
0

我們有來自外部系統通過肥皂信封的xml消息。如果有一個編碼頭,那麼我們使用它,否則我們提供一個UTF-8。Xerces-c無法解析倒置問號

最近,我們已經得到消息了有趣的字符,如倒置的問號:¿,重音字母等

我們的系統處理這些消息未能解析此。我注意到這些XML的格式是iso-8859-1 - 所以我試着將其更改爲UTF-8,以查看解析器是否會彈球,但仍然沒有運氣。

瞭解UTF-8支持更廣泛的範圍,我在這裏檢查了iso-8859-1的字符集表:http://en.wikipedia.org/wiki/ISO/IEC_8859-1。它似乎倒置的問號,支持重音字母。

我打這個牆,真的很感謝一些幫助!謝謝!

使用xerces-c 2.7.0在x86 linux機器上使用gnu編譯器3.4編譯的C++/stl代碼。

+1

正常情況下,一個XML編寫器應該使用實體編碼對這些字符進行編碼...... – leemes 2013-03-04 15:22:46

+0

正如leemes所說,問題不在於您使用的字符集,而是XML預期很多特殊字符被正確編碼爲&something;而不是代碼中的文字。所以無論誰給你發送這些數據基本上都是給你發送無效的XML。 – 2013-03-04 15:24:32

+0

@OriginalCliche:你是否實際上將郵件內容重新編碼爲UTF-8,或者是否只是將xml頭從「iso-8859-1」更改爲「utf-8」?不僅「UTF-8支持更廣泛的範圍」,問題在於代碼不同。倒置問號可能顯示爲兩個字節(0xc2 0xbf),而在iso-8859-1中則爲一個字節(0xbf) – Luis 2013-03-04 15:41:13

回答

0

正如評論指出的那樣,XML閱讀器不一定支持「特殊」字符。這不是xerces-c的唯一問題,但也發生在幾個版本的JavaScript XML解析器中。我最終解決了這個問題(例如南美洲的河流名稱,包含各種帶有UTF-8中的多個字符的重音字母),方法是使用& #nnn;命名,基於這裏的表格:http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent

+0

感謝大家對此的意見。我認爲這些字符應該被編碼爲與文字相反的字符很有意義。我將與這些XML內容的提供者討論,看看他們是否可以向我們發送正確編碼的XML消息。如果不是 - 你們有沒有知道任何可以幫助將文字轉換爲正確編碼的XML的庫?它會給我們的服務器增加開銷,但至少它會提供一些即時解決方案,同時與第三方供應商進行討論。再次感謝大家! – OriginalCliche 2013-03-04 21:26:12

+0

如果您希望對「XML的供應商需要解決的問題」提供更多支持,請嘗試在您的瀏覽器中加載XML [嘗試IE,FireFox和/或Chrome]。如果它變成「有趣」,那麼你知道它徹底壞了。 XML的供應商很可能只使用了XML分析器的ONE變體,這恰好可以工作。你也可以嘗試使用JavaScript,使用'var parser = new DOMParser(); xmlContent = parser.parseFromString(xmlString,「text/xml」);'其中'xmlString'是您的XML內容字符串。 – 2013-03-04 23:27:04