2015-09-27 155 views
1

最近我一直在爲我正在開發的遊戲(使用Cocos2d-X)的本地化系統使用XML文件。我正在使用PugiXML來解析XML本地化文件。使用換行符(\n)字符解析英文字符串時遇到問題。把更準確地,在XML文件中:PugiXML C++新行處理問題:' n n'變成'\ n \ n'

enter image description here

的問題是,這些PugiXML人物\n\n解析成\\n\\n。這是它看起來像調試器:

enter image description here

注意:系統正在嘗試翻譯的字符串是

englishstring (englishstring std::__1::string "(We?[lcom]*e)(to|Regex).+\n\n(tap to continue)")

和pugixml被返回的字符串是

engString(engString std::__1::string "(We?[lcom]*e)(to|Regex).+\\n\\n(tap to continue)")

明顯地比較這兩個str ings失敗了,所以沒有任何東西被翻譯。另外,Cocos2d-X不會畫\\n的換行符,因此設置所有換行符也不是一個選項。

我明白這可能是想要的行爲,但我的問題是:我該如何修復/禁用此行爲?我已經將我的XML解析模式設置爲pugi::parse_minimal,但它仍然返回\\n個字符。

回答

1

在C++中,字符串中的反斜線必須用另一個反斜槓進行轉義。因此,如果文本包含\,它將以字符串形式顯示爲"\\",即使它僅包含一個反斜槓。

反斜槓後面的字符不會改變它。在xml中的\n只是兩個字符,其中一個是反斜槓。所以\n變成"\\n"

你似乎期待在XML中換行。在這種情況下,您必須使用xml實體
來表示換行符。因此,而不是

<string16 englishstring="(We?[lcom]*e)(to|Regex).+\n\n(tap to continue)"> 

使用這個代替

<string16 englishstring="(We?[lcom]*e)(to|Regex).+&#10;&#10;(tap to continue)"> 

或者你可以把逐字換行符在XML。這將是這樣的:

<string16 englishstring="(We?[lcom]*e)(to|Regex).+ 

(tap to continue)"> 

但是,並非所有的XML解析器支持,我不知道PugiXML。

+1

謝謝,這正是我所需要的。詳細地說,向XML中添加換行符並沒有對PugiXML做任何事情,但 似乎工作得很好,正是我所需要的。我還想指出,PugiXML需要它的默認解析選項才能工作,這意味着使用pugi :: parse_minimal不會將 轉換爲\ n。 –